バッチファイルでパスに()とか含む時

以前、「scala の使い方が誤っています。」というエントリを書いた。バッチファイルの中で扱うパスに括弧が含まれていることに起因する問題だった。64ビットWindowsだと、C:Program Files (x86)ってフォルダがあるので。

で、その時は単純にダブルクォートで囲えばいいやと思って

set FOO="%PATH_X86%foo"

とかやったんだけど、これだとFOOにダブルクォートが含まれてしまう。以下のようにやればOK。結構目から鱗だった。

set "FOO=%PATH_X86%foo"

以下のようなバッチファイルを括弧を含むフォルダの下に置いて、色々変更しながら実行してみると分かりやすい。

if "%OS%"=="Windows_NT" (
  SET "FOO=%~dp0..%"
  SET BAR="%~dp0..%"
  echo "%FOO%"
  echo %BAR%
)
SET FOO=%~dp0..%
SET BAR="%~dp0..%"
echo %FOO%
echo %BAR%
pause

これに気づかせてくれたのがここ(英語)。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です