MS-DOS BAT batchファイルその3

rem test.bat
if "%1" == "" (
 echo invalid (too few argument)
 echo 終了します
 exit
)
echo "ok"

で、

 > test.bat
 invalid (too few argument
 終了します
 >

これはよし(1点良くないが)。
で、

 > test.bat hoge
 終了します
 >

…終了してしまう。一応こちらの意図としては、第一引数が入力されるとokとプリントしてほしいのに。


この現象は、batファイルの、echoコマンドに続く文字列の扱いに原因がある。つまるところ、最初のechoの引数である、 invalid (too few argument) の終りの')'でif文が閉じてしまうのである。意味わかんねぇ。明確に文字列であることを示そうと思って

 echo "invalid (too few argument)"

とすると、一緒に"も出力しやがる。
結局()をエスケープしようとする場合、下記のようにすればいいようだ。

rem test2.bat
if "%1" == "" (
 echo invalid ^(too few argument^)
 echo 終了します
 exit
)
echo "ok"

こんなもん知るか。