if

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

構文

if [not] ERRORLEVEL <number> <command> [else <expression>]
if [not] <string1>==<string2> <command> [else <expression>]
if [not] exist <filename> <command> [else <expression>]

コマンド拡張機能が有効な場合は、次の構文を使います。

if [/i] <string1> <compareop> <string2> <command> [else <expression>]
if cmdextversion <number> <command> [else <expression>]
if defined <variable> <command> [else <expression>]

パラメーター

パラメーター 説明
not 条件が false の場合にのみコマンドを実行するように指定します。
errorlevel <number> Cmd.exe を使って実行した前回のプログラムから、number 以上の終了コードが返された場合にのみ、true 条件を指定します。
<command> 前の条件が満たされた場合に実行するコマンドを指定します。
<string1>==<string2> string1string2 が同じ場合にのみ、true 条件を指定します。 これらの値には、リテラル文字列またはバッチ変数 (例: %1) を指定できます。 リテラル文字列を引用符で囲む必要はありません。
exist <filename> 指定したファイル名が存在する場合に true 条件を指定します。
<compareop> 次のような 3 文字の比較演算子を指定します。
  • EQU - 次の値と等しい
  • NEQ - 次の値と等しくない
  • LSS - 次の値未満
  • LEQ - 次の値以下
  • GTR - 次の値より大きい
  • GEQ - 次の値以上
/i 文字列の比較で大文字と小文字を区別しないように強制します。 ifstring1==string2 形式で /i を使うことができます。 これらの比較は汎用的であり、string1string2 の両方が数値のみで構成されている場合は、文字列が数値に変換され、数値の比較が実行されます。
cmdextversion <number> Cmd.exe のコマンド拡張機能に関連付けられた内部バージョン番号が、指定した数値以上である場合にのみ、true 条件を指定します。 最初のバージョンは 1 です。 コマンド拡張機能に重大な機能強化が追加されると、1 ずつ増えます。 コマンド拡張機能が無効の場合、cmdextversion 条件が true になることはありません (既定では、コマンド拡張機能は有効です)。
defined <variable> variable が定義されている場合に true 条件を指定します。
<expression> else 句で、コマンドライン コマンドとコマンドに渡すパラメーターを指定します。
/? コマンド プロンプトにヘルプを表示します。

解説

  • if 句で指定した条件が true の場合、その条件に続くコマンドが実行されます。条件が false の場合、if 句内のこのコマンドは無視され、else 句で指定したコマンドが実行されます。

  • プログラムが停止すると、終了コードが返されます。 終了コードを条件として使うには、errorlevel パラメーターを使います。

  • defined を使った場合は、%errorlevel%%cmdcmdline%%cmdextversion% という 3 つの変数が環境に追加されます。

    • %errorlevel%: ERRORLEVEL 環境変数の現在の値の文字列表現に展開します。 この変数は、ERRORLEVEL という既存の環境変数が存在しないことを前提としています。 存在する場合は、代わりにその ERRORLEVEL 値を受け取ります。

    • %cmdcmdline%: Cmd.exe による処理の前に、Cmd.exe に渡された元のコマンド ラインに展開します。 これは、CMDCMDLINE という既存の環境変数がまだ存在しないことを前提としています。 存在する場合は、代わりにその CMDCMDLINE 値を受け取ります。

    • %cmdextversion%: cmdextversion の現在の値の文字列表現に展開します。 これは、CMDEXTVERSION という既存の環境変数が存在しないことを前提としています。 存在する場合は、代わりにその CMDEXTVERSION 値を受け取ります。

  • else 句は、if の後のコマンドと同じ行で使う必要があります。

ファイル Product.dat が見つからない場合に "データ ファイルが見つかりません" というメッセージを表示するには、次のように入力します。

if not exist product.dat echo Cannot find data file

ドライブ A のディスクをフォーマットし、フォーマット時にエラーが発生した場合にエラー メッセージを表示するには、バッチ ファイルに以下の行を入力します。

:begin
@echo off
format a: /s
if not errorlevel 1 goto end
echo An error occurred during formatting.
:end
echo End of batch program.

ファイル Product.dat を現在のディレクトリから削除する場合、または Product.dat が見つからない場合にメッセージを表示する場合は、バッチ ファイルに以下の行を入力します。

IF EXIST Product.dat (
del Product.dat
) ELSE (
echo The Product.dat file is missing.
)

Note

これらの行は、次のように 1 行にまとめることができます。

IF EXIST Product.dat (del Product.dat) ELSE (echo The Product.dat file is missing.)

バッチ ファイルの実行後に ERRORLEVEL 環境変数の値をエコーするには、バッチ ファイルに以下の行を入力します。

goto answer%errorlevel%
:answer1
echo The program returned error level 1
goto end
:answer0
echo The program returned error level 0
goto end
:end
echo Done!

ERRORLEVEL 環境変数の値が 1 以下の場合、okay ラベルに移動するには、次のように入力します。

if %errorlevel% LEQ 1 goto okay