バッチファイルでif文を使っていてハマったので、ハマらないための書き方と注意点をまとめてみた
解決方法
何も考えず必ず以下の形で書く。
if 条件 ( ←(1)
call :サブルーチン名 引数 ←(2)
) else if 条件 ( ←(3)
call :サブルーチン名 引数
) else ( ←(4)
call :サブルーチン名 引数
) ←(5)
以下説明
(1)条件文
末尾の'('はこの行の行末に書く。その後ろに継続して記述しない。
この行にコマンド書くとろくな事にならない。
悪い例:
if "%FOO%"=="1" ( set VAR=2 )
は %VAR% に "2 "(後ろに余計なスペースあり) を代入する
if "%FOO%"=="1" (
set VAR=2
)
なら問題ない
(2)実行文は書かず極力サブルーチンを呼び出す
※ifの()の中で色々と記述すると大抵不幸になる。
代わりにサブルーチンを呼び出す。
※ifの()の中で変数代入しても、新しい値が有効になるのは()から出た後。
悪い例:
set AAA=
set BBB=0
if "1"=="1" (
set AAA=10
set /a BBB=AAA+20
)
echo %BBB%
上記の例は、期待した値30ではなく値20を出力する。
(3)else if文
省略可能。まぁ、当たり前。
(4)else文
必ず行頭から") else ("とし、直ぐに改行。
※elseの前後にスペースが必要
(5)末尾の')'
必ず行頭から")"とし、直ぐに改行。
悪い例:
if "1"=="1" (
set AAA=10 )
上記の例では、%AAA%に"10 "が入る。(末尾に余計なスペースあり)