バッチファイルの勉強
今までDOSの勉強なんてほとんどしてなくて全然分からんけど挑戦した。やってみて、きちんと勉強すればDOSも意外に仕える存在かもしれないと認識を改める事が出来た事が何よりの収穫。
help command
ヘルプは充実していて良い感じ
- ネットで調べるより
help
コマンドを見たほうが充実している - サンプルも載っているので理解しやすい
FOR
コマンド
- バッチファイルで使用する時は変数
%変数
を%%変数
としないといけない - 変数がファイルパスの場合、
%~f変数
でフルパスを得る事が出来る
set
コマンド
help set
の方にFOR
コマンド中にset
を使用するときの注意点が載っている
set LIST= for %i in (*) do set LIST=%LIST% %i echo %LIST%この例では、現在のディレクトリのファイルの一覧は作成されず、代わりに最後に見つけられたファイルが LIST 変数に設定されます。これは %LIST% が FOR 文が読み取られるとき、一度だけ展開され、そのときは LIST 変数は、空だからです。つまり、実際に実行されている FOR ループはfor %i in (*) do set LIST= %iで、LIST に最後にみつけられたファイルを設定し続けているだけです。 遅延環境変数の展開では、実行時に環境変数を展開するために異なった文字(感嘆符)を使うことができます。遅延環境変数の展開が有効な場合、上記の例は次のように書くと意図したように動作します。rem (略) set LIST= for %i in (*) do set LIST=!LIST! %i echo %LIST%
setlocal
コマンド
これバッチファイルを書く時には重要と思われる。バッチファイル中で遅延環境変数の展開のon,offを設定する事が出来るのだ。SETLOCAL ENABLEDELAYEDEXPANSION
とすることで遅延環境変数の展開を on にする事ができ、help set
に載っていたFOR
コマンド中のデータ追加が可能となる。
因みにコマンドプロンプト中で遅延環境変数の展開を on にするにはcmd /v:on
とすれば良い。詳しくはhelp cmd
で。デフォルトでonにしておく設定方法も載っているので見て損は無いかと。
まとめ
まとめるとバッチファイル中で空白区切りのフルパスのファイルリストを得るには
setlocal ENABLEDELAYEDEXPANSION set FILE_LIST= for %%i in (*) do set FILE_LIST=!FILE_LIST! %%i
とすれば良い。
*1:"ヤン"は私の旧ハンドルネーム。こちらでは使い続けている。