if

構文

if

バッチ プログラム中で条件処理を実行します。

IF [NOT] ERRORLEVEL 番号 コマンド
IF [NOT] 文字列1==文字列2 コマンド
IF [NOT] EXIST ファイル名 コマンド
NOT 条件が偽の場合にだけ、Windows がコマンドを実行することを指定します。
ERRORLEVEL 番号 最後のプログラムの実行で指定された番号以上の終了コードが返されたときに、条件が真になるように指定します。
文字列1==文字列2 テキスト文字列が一致するときに条件が真になるように指定します。

※つねに文字列として比較される。コマンド拡張のEQUでは、変数が数字ならば数値として比較される。

EXIST ファイル名 指定したファイル名が存在するときに条件が真になるように指定します。
コマンド 条件が真のときに実行するコマンドを指定します。コマンドに続けて、ELSE キーワードの後、指定した条件が偽の場合に実行される ELSE コマンドを指定できます。

ELSE 節は、IF の後のコマンドと同じ行に置きます。

例:

IF EXIST filename. (
    del filename.
) ELSE (
    echo filename. missing.
)

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

IF EXIST filename. del filename. ELSE echo filename. missing

ELSE コマンドは、IF コマンドの終わりと同じ行で始まらなければならないため、次の例は正しく動作しません:

IF EXIST filename. del filename.
ELSE echo filename. missing

次の例のように、すべてのコマンドを 1 行にすれば正しく動作します:

IF EXIST filename. (del filename.) ELSE echo filename. missing

コマンド拡張機能を有効にすると、IF は次のように変更されます:

IF [/I] 文字列 1 比較演算子 文字列 2 コマンド
IF CMDEXTVERSION 番号 コマンド
IF DEFINED 変数 コマンド

比較演算子は、次のいずれかです:

  • EQU … 等しい
  • NEQ … 等しくない
  • LSS … より小さい
  • LEQ … 以下
  • GTR … より大きい
  • GEQ … 以上

/I スイッチを指定すると、文字列は、大文字と小文字を区別せずに比較されます。/I スイッチは、IF の文字列 1 == 文字列 2 形式で使うこともできます。この比較は汎用であり、文字列 1 と文字列 2 が両方とも数字だけを含む場合は、文字列が数値に変換され、数値の比較が行われます。

CMDEXTVERSION 条件は ERRORLEVEL と同様に動作しますが、コマンド拡張機能に関連付けられている内部バージョン番号との比較を行います。最初のバージョンは 1 です。コマンド拡張機能に重要な拡張が追加された場合は、値が 1 大きくなります。コマンド拡張機能が無効である場合は、CMDEXTVERSION 条件は常に偽です。

DEFINED 条件は EXIST と同様に動作しますが、環境変数名を受け取って、環境変数が定義されている場合は真を返します。

%ERRORLEVEL% は、ERRORLEVEL の現在の値の文字列表記に展開されます。ただし、ERRORLEVEL という名前の環境変数がすでに定義されている場合は、その環境変数の値が取得されます。

プログラム実行後、次の例が ERRORLEVEL の使い方を説明しています:

goto answer%ERRORLEVEL%
:answer0
echo Program had return code 0
:answer1
echo Program had return code 1

また、上の数値比較を使うこともできます:

IF %ERRORLEVEL% LEQ 1 goto okay

%CMDCMDLINE% は、CMD.EXE が処理する前の、CMD.EXE に渡されたオリジナルのコマンド ラインに展開されます。ただし、CMDCMDLINE という名前の環境変数がすでに定義されている場合は、その環境変数の値が取得されます。

%CMDEXTVERSION% は、CMDEXTVERSION の現在の値の文字列表記に展開されます。ただし、CMDEXTVERSION という名前の環境変数がすでに定義されている場合は、その環境変数の値が取得されます。

"if /?"

文字列の部分一致で条件分岐するには、次のようにします。windows - Batch file: Find if substring is in string (not in a file) - Stack Overflow

set a=%1
if not "%a:ABC=%" == "%a%" echo ok

この例では%a%の文字列に'ABC'が含まれているならば、その部分を空文字列に置換しています。そして置換後の文字列と元の%a%を比較し、等しくなければ一致する文字列が含まれていたものと判定しています。

利用例

@if [%1] == [] (
    echo error
    exit /b
) else (
    echo %1
)