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

  • 47
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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