概要

このページは、Windowsのバッチファイルのif文について記述します。
if文は指定した条件に対して真および偽をチェックします。
書式は以下の4種類があります。

真の時実行するコマンドが1行の場合

if 条件等 真の時実行するコマンド

真の時実行するコマンドが複数行の場合

if 条件等 (
 真の時実行するコマンド1
 真の時実行するコマンド2
)

真と偽の時実行するコマンドが複数行の場合

if 条件等 (
 真の時実行するコマンド1
 真の時実行するコマンド2
) else 偽の時実行するコマンド

真と偽の時実行するコマンドが複数行の場合

if 条件等 (
 真の時実行するコマンド1
 真の時実行するコマンド2
) else (
 偽の時実行するコマンド1
 偽の時実行するコマンド2
)

値の比較

記述方法

if [/i] [not] 値1 比較演算子 値2 実行するコマンド
値1と値2を比較し真偽に応じてコマンドを実行します。
/i を指定すると大文字小文字を区別せずに比較します。
[]は省略可能なことを示しています。
notを指定すると条件の真偽が反転します。
演算子 意味
== 値1==値2
EQU 値1==値2
NEQ 値1!=値2
LSS 値1<値2
LEQ 値1<=値2
GTR 値1>値2
GEQ 値1>=値2
環境変数の値が空白および空白の文字列が含まれている場合は正常に比較できないので"(ダブルコーテーション)で囲むと正常に動作します。
以下のバッチファイルは、バッチファイルの中で定義した環境変数に対して値の比較、消去した環境変数に対する比較、文字列の比較のサンプルです。

バッチファイル

rem if文の条件判断のサンプル

set test=256
if %test%==256 echo 真
if %test% GTR 128 echo 真


set test=
if "%test%"=="" echo 真
set test=
if not "%test%" NEQ "" echo 真
set test=abc
if %test%==ABC (
        echo 真
)else echo 偽

if /i %test%==ABC (
        echo 真
)else echo 偽
pause

実行結果

D:¥bat¥if>rem if文の条件判断のサンプル 

D:¥bat¥if>set test=256 

D:¥bat¥if>if 256 == 256 echo 真 
真

D:¥bat¥if>if 256 GTR 128 echo 真 
真

D:¥bat¥if>set test= 

D:¥bat¥if>if "" == "" echo 真 
真

D:¥bat¥if>set test= 

D:¥bat¥if>if not "" NEQ "" echo 真 
真

D:¥bat¥if>set test=abc 

D:¥bat¥if>if abc == ABC (echo 真 )  else echo 偽 
偽

D:¥bat¥if>if /I abc == ABC (echo 真 )  else echo 偽 
真

D:¥bat¥if>pause
続行するには何かキーを押してください . . . 

ファイルの存在をチェック

記述方法

ファイルの存在をチェックします。
if [not] exist ファイル名 コマンド
[]は省略可能なことを示しています。
notを指定すると条件の真偽が反転します。
以下のバッチファイルは、test.txtというファイルを作成し、if文でファイルの存在を確認します。その後test.txtは削除します。

バッチファイル

rem ファイルを作成しファイルの存在を確認します
echo 1234 >  test.txt
if exist test.txt echo test.txtファイルは存在します。
del test.txt
pause

実行結果

D:¥bat¥if>rem ファイルを作成しファイルの存在を確認します 

D:¥bat¥if>echo 1234  1>test.txt 

D:¥bat¥if>if exist test.txt echo test.txtファイルは存在します。 
test.txtファイルは存在します。

D:¥bat¥if>del test.txt 

D:¥bat¥if>pause
続行するには何かキーを押してください . . . 

フォルダーの存在をチェック

フォルダーの存在をチェックします。

記述方法

if [not] exist フォルダー名\ コマンド
[]は省略可能なことを示しています。
notを指定すると条件の真偽が反転します。
以下のバッチファイルは、testdirというフォルダーを作成し、if文でフォルダーの存在を確認します。その後作成したフォルダーは削除します。

バッチファイル

rem フォルダーを作成しフォルダーの存在を確認します
md testdir >  nul
if exist testdir¥ echo testdirフォルダーは存在します。
rd testdir
pause

実行結果

D:¥bat¥if>rem フォルダーを作成しフォルダーの存在を確認します 

D:¥bat¥if>md testdir  1>nul 

D:¥bat¥if>if exist testdir¥ echo testdirフォルダーは存在します。 
testdirフォルダーは存在します。

D:¥bat¥if>rd testdir 

D:¥bat¥if>pause
続行するには何かキーを押してください . . . 

環境変数が定義されているかチェック

記述方法

環境変数が定義されているか確認します。
if [not] defined 環境変数名 コマンド
[]は省略可能なことを示しています。
notを指定すると条件の真偽が反転します。
以下のバッチファイルは定義した環境変数が存在するかチェックします。

バッチファイル

rem 環境変数を定義し環境変数が定義されているのを確認します
set TEST12=ABCD
if defined TEST12 echo 真
pause

実行結果

D:¥bat¥if>rem フォルダーを作成しフォルダーの存在を確認します 

D:¥bat¥if>set TEST12=ABCD 

D:¥bat¥if>if defined TEST12 echo 真 
真

D:¥bat¥if>pause
続行するには何かキーを押してください . . . 

エラーレベルのチェック

エラーレベルが値と等しいかより大きい場合真となります。
エラーレベルとはコマンド等が一般的に正常に動作した場合は0を返しそれ以外の場合は0以外のエラーレベルを返します。

記述方法

if [not] errorlevel 値 コマンド
[]は省略可能なことを示しています。
notを指定すると条件の真偽が反転します。
以下のバッチファイルは、エラーレーベルを設定するサブルーチンerrsetでエラーレベルを10に設定した後、if文でエラーレベルのチェックを行うサンプルです。

バッチファイル

call :errset 10
if errorlevel 10 echo エラーレーベルは10以上でした
pause
goto :eof

:errset
exit /b %1

実行結果

D:¥bat¥if>call :errset 10 

D:¥bat¥if>exit /b 10 

D:¥bat¥if>if errorlevel 10 echo エラーレーベルは10以上でした 
エラーレーベルは10以上でした

D:¥bat¥if>pause
続行するには何かキーを押してください . . . 

D:¥bat¥if>goto :eof