IF(条件分岐)

にメンテナンス済み

バッチファイルを作成していると、「条件に応じて処理を分けたい」という場面は非常に多く発生します。

例えば、ファイルが存在するときだけコピーを実行する、前のコマンドが成功したら次の処理に進む、といったケースです。

このような条件分岐を実現するのが IF コマンドです。

この記事では、IF コマンドの基本から応用まで、具体的なサンプルコードを交えて詳しく解説します。

IF コマンドの基本構文

IF コマンドの基本的な構文は以下の通りです。

構文
IF 条件 (
    rem 条件が真の場合に実行する処理
)

条件が偽の場合の処理も記述する場合は、ELSE を使用します。

IF-ELSE構文
IF 条件 (
    rem 条件が真の場合の処理
) ELSE (
    rem 条件が偽の場合の処理
)
構文上の注意

ELSE は、直前の閉じ括弧 ) と同じ行に記述する必要があります。改行して ELSE を書くと正しく動作しません。

文字列を比較する

2 つの文字列が等しいかどうかを判定するには、== 演算子を使用します。

構文
IF "%変数%"=="比較する文字列" (
    rem 一致する場合の処理
)
チェック

比較する値はダブルクォーテーションで囲むことを推奨します。変数が空の場合に構文エラーを防ぐことができます。

使用例

ユーザーからの入力に応じて処理を分岐する例です。

string_compare.cmd
@echo off
setlocal

set /p ANSWER=続行しますか?(Y/N):

IF "%ANSWER%"=="Y" (
    echo 処理を続行します。
) ELSE (
    echo 処理を中止しました。
)

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>string_compare.cmd
続行しますか?(Y/N): Y
処理を続行します。
C:\users\user>

大文字・小文字を区別しない比較

/I オプションを使用すると、大文字・小文字を区別せずに比較できます。

大文字小文字を無視する比較
IF /I "%ANSWER%"=="y" (
    echo 処理を続行します。
)

この書き方であれば、Y でも y でも条件が真になります。

数値を比較する

数値を比較する場合は、以下の比較演算子を使用します。

演算子意味
EQU等しい(Equal)IF %A% EQU 10
NEQ等しくない(Not Equal)IF %A% NEQ 0
LSSより小さい(Less Than)IF %A% LSS 100
LEQ以下(Less or Equal)IF %A% LEQ 100
GTRより大きい(Greater Than)IF %A% GTR 0
GEQ以上(Greater or Equal)IF %A% GEQ 1

使用例

number_compare.cmd
@echo off
setlocal

set /a NUM=75

IF %NUM% GEQ 80 (
    echo 合格です(優秀)
) ELSE IF %NUM% GEQ 60 (
    echo 合格です
) ELSE (
    echo 不合格です
)

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>number_compare.cmd
合格です
C:\users\user>
IF ELSE IF について

上記の例のように ELSE IF を連続して記述することで、複数の条件を順番に評価できます。最初に真となった条件のブロックだけが実行されます。

ファイルやフォルダの存在を確認する

IF EXIST を使うと、指定したファイルやフォルダが存在するかどうかを確認できます。

構文
IF EXIST "パス" (
    rem 存在する場合の処理
)

使用例

check_file.cmd
@echo off
setlocal

IF EXIST "C:\Users\user\Documents\report.txt" (
    echo ファイルが見つかりました。
) ELSE (
    echo ファイルが存在しません。
)

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>check_file.cmd
ファイルが見つかりました。
C:\users\user>

フォルダの存在確認

フォルダの存在を確認する場合は、パスの末尾に \ を付けるか、NUL を使用します。

フォルダの存在確認
IF EXIST "C:\Users\user\Documents\" (
    echo フォルダが存在します。
)

変数が定義されているか確認する

IF DEFINED を使用すると、変数が定義されているかどうかを確認できます。

構文
IF DEFINED 変数名 (
    rem 変数が定義されている場合の処理
)

使用例

check_defined.cmd
@echo off
setlocal

set MY_VAR=Hello

IF DEFINED MY_VAR (
    echo MY_VAR は定義されています:%MY_VAR%
) ELSE (
    echo MY_VAR は定義されていません。
)

endlocal
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2026 Ribbit App Development All rights reserved.
 
C:\users\user>check_defined.cmd
MY_VAR は定義されています:Hello
C:\users\user>

ERRORLEVEL を判定する

直前のコマンドの終了コードを確認するには、IF ERRORLEVEL または %ERRORLEVEL% を使用します。

構文
IF ERRORLEVEL 1 (
    rem 終了コードが1以上の場合の処理
)
ERRORLEVEL の注意点

IF ERRORLEVEL N は「ERRORLEVEL が N 以上」の場合に真となります。「ERRORLEVEL が N と等しい」場合のみ判定したい場合は IF %ERRORLEVEL% EQU N を使用してください。

使用例

check_error.cmd
@echo off
setlocal

copy "source.txt" "dest.txt" >nul 2>&1

IF %ERRORLEVEL% EQU 0 (
    echo コピーが成功しました。
) ELSE (
    echo コピーに失敗しました。エラーコード: %ERRORLEVEL%
)

endlocal

NOT で条件を否定する

NOT を使用すると、条件を反転させることができます。

NOT
IF NOT EXIST "backup\" (
    mkdir backup
    echo backup フォルダを作成しました。
)

IF NOT "%USERNAME%"=="admin" (
    echo 管理者ではありません。
)

IF NOT DEFINED CONFIG_PATH (
    set CONFIG_PATH=C:\default\config.ini
)

複数の条件を組み合わせる

バッチファイルには ANDOR 演算子はありませんが、IF 文をネストすることで同等の処理を実現できます。

AND 条件(両方の条件を満たす場合)

AND条件
IF EXIST "data.txt" (
    IF %ERRORLEVEL% EQU 0 (
        echo 条件をすべて満たしています。
    )
)

OR 条件(いずれかの条件を満たす場合)

OR条件
set MATCH=0
IF "%INPUT%"=="A" set MATCH=1
IF "%INPUT%"=="B" set MATCH=1
IF %MATCH% EQU 1 (
    echo A または B が入力されました。
)

まとめ

この記事では、IF コマンドの使い方について解説しました。

条件の種類構文
文字列比較IF "%A%"=="%B%"
大文字小文字無視IF /I "%A%"=="%B%"
数値比較IF %A% EQU %B%
ファイル存在IF EXIST "パス"
変数が定義済みかIF DEFINED 変数名
エラーレベルIF %ERRORLEVEL% EQU 0
否定IF NOT 条件

IF コマンドを使いこなすことで、バッチファイルの処理をより柔軟に制御できるようになります。

関連記事

練習問題

練習問題

IF コマンドについて、誤っている説明を選択してください。

回答がサーバーに送信されることはありません
#コマンドプロンプト #バッチファイル #IF #条件分岐 #コマンド