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> |
string1 と string2 が同じ場合にのみ、true 条件を指定します。 これらの値には、リテラル文字列またはバッチ変数 (例: %1 ) を指定できます。 リテラル文字列を引用符で囲む必要はありません。 |
exist <filename> |
指定したファイル名が存在する場合に true 条件を指定します。 |
<compareop> |
次のような 3 文字の比較演算子を指定します。
|
/i | 文字列の比較で大文字と小文字を区別しないように強制します。 if の string1==string2 形式で /i を使うことができます。 これらの比較は汎用的であり、string1 と string2 の両方が数値のみで構成されている場合は、文字列が数値に変換され、数値の比較が実行されます。 |
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