バッチファイル

バッチファイルでif文をトラブルなく使う

More than 3 years have passed since last update.

バッチファイルで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 "が入る。(末尾に余計なスペースあり)