2007-08-19

すべてのコマンドライン引数に対して処理を行うバッチファイルの作成

ドラッグ&ドロップされたすべてのファイルに対して処理を行うバッチファイルの書き方について。

バッチファイルのコマンドライン引数は%nnは0から9までの数字。ただし、%0はバッチファイル自身)で参照できる。しかし、この方法では%1から%9の9つの引数しか扱えない。そこで、gotoコマンドを使ったループとshiftコマンドを用いて、すべてのコマンドライン引数を処理する。

:loop

if "%~1" == "" goto end

rem ここに%1に対して処理を書く。例えば次のように。
echo %1

shift

goto loop

:end

echo %1」のところに処理を記述する(ここでは単に%1の内容を出力しているだけ)。

コマンドライン引数が確実に1つ以上あるとわかっている場合は以下のようにも書ける。

:loop

echo %1

shift

if not "%~1" == "" goto loop

%1が空かどうかを判定するところで%~1としているのは、%1の内容から引用符(")を取り除くため。そうしないと%1が引用符で囲まれている場合(例えば、空白文字を含むパスが渡されたとき)にうまく処理されない。

コメント (0)