引数を全て取得したい場合に、
: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