バッチファイル(BATファイル)の実行時引数にスペースを含む場合、その引数をダブルクォートで囲む必要がある。
一方、実行されたバッチファイル内で別途実行するコマンドに受け取った引数を渡す場合、同様にダブルクォートで囲む必要がある。
しかし、以下のように単純にダブルクォートで囲むと、望み通りではない結果となる。
a.bat
@call b.bat "Hi %1, How are you?"
b.bat
@echo %1
上記a.batを実行すると、以下のようになる。
> a.bat "Hoge Fuge"
"Hi "Hoge
解決策
以下のように、引数をフィルタリング(?)することで上記問題を解決できる。
a2.bat
@call b2.bat "Hi %~1, How are you?"
b2.bat
@echo %~1
上記a2.batを実行すると、望み通りの結果となる。
> a2.bat "Fuge Hoge"
Hi Fuge Hoge, How are you?
自分は長年知らずに困ることがあったので、同様に困っている方に共有したいと思い、本記事を掲載することにした。