今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

Windows コマンドプロンプトの for 文

バッチファイルで for 文を使って多数のファイルを処理しようとしている。このとき、コマンドプロンプトで for 文を使うわけだけど、for 文の書式って

for %変数 (セット) do コマンド

だったりして、複数のコマンドを実行できない。いや、& でつなげばできるんだけど、1行が長くなるので気持ちが悪い。そこで、新しくバッチファイルを書いたりする。

for /d %%i (*) do call callee.bat %%i

ここで callee.bat の中でディレクトリを移動すると、さらに大変なことになる。バッチファイルから抜けるときに元のディレクトリに戻ってないと、その後の処理がうまくいかなくなってしまう。
んなわけで、格闘中。。。
バッチファイルの実行途中で、現在の作業ディレクトリがどこにあるのかを表示するために、cd コマンドをちりばめてみる。引数なしなら現在の作業ディレクトリを表示してくれるから。で、よく見てみると、バッチファイルAから call コマンドで別のバッチファイルBを呼び出し、さらに call して別のバッチファイルCを呼び出した後のところ。バッチファイルBに戻らずに、直接バッチファイルAの call の次の行が実行されていることがわかった。call コマンドでバッチファイルを呼び出すのって、ネストした呼び出しはできないんだっけ?