バッチ プログラムで条件付き処理を実行します。
Syntax
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>]
Parameters
| Parameter | Description |
|---|---|
| not | 条件が false の場合にのみコマンドを実行することを指定します。 |
エラーレベル <number> |
Cmd.exe によって実行された前のプログラムが number 以上の終了コードを戻した場合にのみ、true 条件を指定します。 |
<command> |
上記の条件が満たされた場合に実行する必要があるコマンドを指定します。 |
<string1>==<string2> |
string1 と string2 が同じ場合にのみ true の条件を指定します。 これらの値には、リテラル文字列やバッチ変数 (たとえば、%1) を指定できます。 リテラル文字列を引用符で囲む必要はありません。 |
存在する <filename> |
指定したファイル名が存在する場合に true 条件を指定します。 |
<compareop> |
次のような 3 文字の比較演算子を指定します。
|
| /i | 文字列の比較で大文字と小文字が区別されません。
ifのstring1==string2形式で/iを使用できます。 これらの比較は、 string1 と string2 の両方が数字のみで構成されている場合、文字列が数値に変換され、数値比較が実行されるという点で汎用的です。 |
cmdextversion <number> |
Cmd.exe のコマンド拡張機能に関連付けられている内部バージョン番号が、指定した数以上である場合にのみ、true 条件を指定します。 最初のバージョンは 1 です。 コマンド拡張機能に大幅な機能強化が追加されると、1 ずつ増加します。 コマンド拡張機能が無効になっている場合、 cmdextversion 条件は true になりません (既定では、コマンド拡張機能は有効になっています)。 |
定義 <variable> |
変数が定義されている場合に true の条件を指定します。 |
<expression> |
コマンド行コマンドと、コマンドに渡されるパラメーターを else 句で指定します。 |
| /? | コマンド プロンプトにヘルプを表示します。 |
Remarks
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 の後のコマンドと同じ行で使用する必要があります。
Examples
メッセージを表示するには ファイル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 以下の場合に ok ラベルに移動するには、次のように入力します。
if %errorlevel% LEQ 1 goto okay