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
でジャンプさせたほうがエラーが少なくて捗る。