1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

入力されたパスをファイルのリストに展開して出力するWSH(JScript)

Last updated at Posted at 2020-07-25

概要

フォルダのリストからファイルのリストに展開するツールが欲しく、真面目にWSH + JScriptで作ってみた。
標準入出力を使ったコンソール ツールとして、割と普通のがWSHできたので、記載する。

(追記)
WSHがシステム文字コードで動いているせいで、ファイル システム上は使えるけどリスト化出来ないファイル名が多数あり、結局.NET(C#)で作りなおした。そのため、WSH使えねー・・・ という感想に変わりました。

スクリプト

結構真面目にコメントとかも書いていたら、300行近くになってて驚いた。
長いので後述。

(追記) 以下に掲載

使用例

  • スクリプト名:expandf.js
  • オプション:コマンドの引数で指定
  • フォルダ リストの入力:標準入力
  • ファイルリストの出力:標準出力

カレント ディレクトリ配下のファイル一覧を出力①

dir /s /b /A-D に近い結果。

command
echo %CD% | cscript.exe /nologo expandf.js

カレント ディレクトリ配下のファイル一覧を出力②

  • -/ ⇒ ディレクトリ セパレーターをスラッシュ(/)に置き換える。
  • -lf ⇒ 改行コードを LF で出力する。
  • > output.txt ⇒ 出力内容を output.txt に出力。
command
echo . | cscript.exe /nologo expandf.js -/ -lf > output.txt
output.txt
./dir0/aaaa.txt
./dir0/bbbb.txt
./dir1/cccc.txt
./dir1/dddd.txt
./eee.txt

Linuxとかとの連携で使えそう。

テキストの内容を展開してファイルの一覧を出力

  • -\ ⇒ ディレクトリ セパレーターをバック スラッシュ(\)に置き換える。
command
type input.txt | cscript.exe /nologo expandf.js -\
input.txt
./dir0/
./dir1/
出力イメージ
.\dir0\aaaa.txt
.\dir0\bbbb.txt
.\dir1\cccc.txt
.\dir1\dddd.txt

EmEditorのコマンドで実行し、一覧を新規ウィンドウで開く (★本命)

  • EmEditorの外部ツールに追加
  • -/ ⇒ ディレクトリ セパレーターをスラッシュ(/)に置き換える。
  • [入力][文書] もしくは**[選択テキスト]**
  • [EOF(Ctrl+Z、U+001Aまたは1AH)を追加] にチェック
    ※ 空文書のときに標準入力待ちになってしまう対策
  • [出力][新規文書作成]
  • [エンコード][システム規定]
    ※ WSHの仕様
  • [標準エラー][アウトプット バーとして表示]
  • [終了時に閉じる] はチェックしておくと良い。
    (エラーがない場合はアウトプット バーが自動で閉じる)

※ Meryも同様の設定で利用できる

外部ツール - emeditor.png
実行イメージ - emeditor.png

テキスト ファイルの記載順にリスト化するので、dirなどでリスト化した場合の順番などの打ち手にもなる。

雑記①

DLNAやandroidで使うプレイリストの定期的なメンテのために、リスト アップ済みのフォルダのリストからファイルのリストを生成するツールが欲しいと思っていて。GUIで何か作るよりも、テキスト エディタとの連携で何か出来ないか、と思って作ってみた。特にディレクトリ セパレータや改行コードは毎回置換・変換が発生していて、何かと辛かったので。。。

『車輪の再発明をするな』の定説に則り、本当に自分に欲しい環境は何かを悩んでみたけど。エディタの外部ツールやWSHには他にも利用用途の可能性はありそうだなぁと思った。

WSHは標準入出力周りが貧弱で痛い目をみたことがあり、少し躊躇するところだったが、それなりものが出来たのは一応良かった。ただ、実行文字コードがOS依存と言う化石的実行形式なのか、UNICODE文字は処理出来ないと言うギャグ的状況は、やっぱり微妙なところ。。。もっとも、今回はあくまでもファイル・フォルダを扱う目的だったので、S-JIS範囲外の文字を使うこともあまりないので、その辺りは一旦割り切って良さそうに思えた。NBSPやZWSPとか普通に処理されても困るし。

もう少し使ってみて、次のブラシアップに繋げたい。

雑記② (追記2020/07/27)

結局 .NET(C#) で書き直した。

ファイル名のアクセント記号が使えない運用にすると、日本語文字もファイル名にはNG になってしまうため。ルールに一貫性なくなってしまい、あまり都合が宜しくなかった。(コンピューター文化に於いては、欧州文字以上に、ラテン語文化から離れている日本語文字の方が異常。)
また、WAVE DASH問題でWindowsが割当をやらかしているせいで WAVE DASH (U+301C) がエラーになってしまう。全角チルダ(U+FF5E) なら使えるが、本当にそれで良いのか???:thinking:

と悩み始め、メディア ファイルの整理目的で使うツールではUNICODEでないのは無理がある と言う結論に至った。

UNICODE化の重要性を改めて痛感した。

謝辞

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?