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 ) )