バッチファイルについて。

引数を全て取得したい場合に、

:head
set option=
if "%2"=="" goto end
set option=%option% %2
shift /2
goto head
:end

とやっていた。こうすれば%option%とすれば引数を呼び出せる。
これをprogram.batと置く。


そして、program.batにファイルをドラックアンドドロップして処理する時
実行の時には

"C:\〜〜〜\program.bat" "C:\〜〜〜\xxx.txt" "C:\〜〜〜\yyy.txt"

という形をコマンドプロンプトに打ち込んだのと同じになる(カレントディレクトリは知らん!)
このときの実行結果は、

and の使い方が誤っています。

というエラーになる。


なぜエラーになるのかというと、ざっと調べたところ、「usskim の日記 |2008年03月」がヒットした。


"C:\〜〜〜\yyy.txt" がそのまま展開されるため、

""C:\〜〜〜\yyy.txt"" == ""

という比較が行われるので、文法的におかしくなるようだ。


対策には、%2を%~2に置き換えればOK。
%~1という表記にすると、両端の " " が取り除かれるので正しく比較できる。

:head
set option=
if "%~2"=="" goto end
set option=%option% %2
shift /2
goto head
:end