素人趣味のWeb制作ブログ

素人趣味でやってるWeb制作とかプログラミングとかそっち系の話題についてのブログです。

素人趣味でやってるWeb制作とかプログラミングとかそっち系の話題についてのブログです。

Windowsバッチのif文の括弧にハマる

Windowsのバッチファイルを作ってて、
ifと括弧の関係でちょっとハマったので備忘録。

中括弧じゃない

{}じゃなくて()で囲うんですよね。毎回{}で書いててエラー出て気づく…。

if文の中で括弧が使えない

set PS_VERSION=CS6
set PS_DIR=%ProgramFiles(x86)%\Adobe\Adobe Photoshop %PS_VERSION%
if exist "%ProgramFiles(x86)%" (
    set PS_DIR_x64=%ProgramFiles%\Adobe\Adobe Photoshop %PS_VERSION% (64 Bit) ←でエラー
) else (
    set PS_DIR=%ProgramFiles%\Adobe\Adobe Photoshop %PS_VERSION%
)

とりあえず括弧の部分を変数に入れて試してみる。

set PS_VERSION=CS6
set X64=(64 Bit)
set PS_DIR=%ProgramFiles(x86)%\Adobe\Adobe Photoshop %PS_VERSION%
if exist "%ProgramFiles(x86)%" (
    set PS_DIR_x64=%ProgramFiles%\Adobe\Adobe Photoshop %PS_VERSION% %X64% ←でエラー
) else (
    set PS_DIR=%ProgramFiles%\Adobe\Adobe Photoshop %PS_VERSION%
)

↑変数を展開してから文法を解釈してるみたいでこれもエラー。
次にif文の中身を括弧外に書いてgoto命令でラベル位置までジャンプさせてみる。

set PS_VERSION=CS6
set PS_DIR=%ProgramFiles(x86)%\Adobe\Adobe Photoshop %PS_VERSION%
if exist "%ProgramFiles(x86)%" (
    goto SET_x64
) else (
    goto SET_x86
)
:SET_x64
set PS_DIR_x64=%ProgramFiles%\Adobe\Adobe Photoshop %PS_VERSION% (64 Bit)
goto END

:SET_x86
set PS_DIR=%ProgramFiles%\Adobe\Adobe Photoshop %PS_VERSION%
goto END

:END

↑成功!

まとめ

if文の中身は括弧外に書いてgotoでジャンプさせたほうがエラーが少なくて捗る。