4.基本文法 (1)if文、else文 〜もしもー、それ以外ならばー〜 【コマンドプロンプト、バッチファイルを使わなきゃならなくなった人向けのメモ】


if文とelse文
else文ももちろん使える。
しばらく使えないと思い込んでた。
ifのヘルプにきっちり書いてあるんだよね。。。

以下の環境変数を設定してることを前提。
set ARG1=A
set ARG2=A

正しい使い方1

if-else-normal1.bat
IF {%ARG1%}=={%ARG2%} (
  echo equal.
) ELSE (
  echo not equal.
)
実行結果
D:\MyDoc\work\#blog\コマンドプロンプト>IF {A} == {A} (echo equal. )  ELSE (echo not equal. )
equal.

実行時には正しい使い方2と同じに解釈される。
でも、この書き方の方が読みやすいので、こちらを使った方がよい。

正しい使い方2

if-else-normal2.bat
IF {%ARG1%}=={%ARG2%} (echo equal.) ELSE (echo not equal.)
実行結果
D:\MyDoc\work\#blog\コマンドプロンプト>IF {A} == {A} (echo eqlual. )  ELSE (echo not equal. )
eqlual.

実行するコマンドを()で囲むのがポイント

誤った使い方1

if-else-error1.bat
IF {%ARG1%}=={%ARG2%} echo equal. ELSE echo not equal.
実行結果
D:\MyDoc\work\#blog\コマンドプロンプト>IF {A} == {A} echo eqlual. ELSE echo not equal.
eqlual. ELSE echo not equal.

ヘルプには以下の説明がある。

del コマンドは、改行で終了しなければならないため、次の例は、正しく動作し
ません:

delだけでなく、コマンドは、改行で終わるまでをパラメータとして認識してしまうから
ELSE以降もコマンドパラメータとして認識されてしまっている。

誤った使い方2

if-else-error2.bat
IF {%ARG1%}=={%ARG2%} echo equal.
ELSE echo not equal.
実行結果
D:\MyDoc\work\#blog\コマンドプロンプト>ELSE echo not equal.
'ELSE' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

ELSEをコマンドとして認識してしまっているのでNG
ifはコマンドだがelseは節(ifのコマンドオプション)なので誤解しやすい

入れ子も可能

set /A TEST1=%random%/10000
set /A TEST2=%random%/10000

IF {%TEST1%}=={1} (
  IF {%TEST2%}=={2} (
     echo TEST1=1,TEST2=2
  ) ELSE (
     echo TEST1=1,TEST2!=2
  )
) ELSE (
  IF {%TEST2%}=={2} (
    echo TEST1!=1,TEST2=2
  ) ELSE (
    echo TEST1!=1,TEST2!=2
  )
)


Windows コマンドプロンプト ポケットリファレンス
4774149543