バッチファイルで「条件によって処理を変える」には if 文を使います。文字列比較・数値比較・ファイル存在確認・errorlevelの4パターンを、構文の意味から丁寧に解説します。
if文の基本構文
バッチファイルのif文は if 条件 (処理) または複数行の形式で書きます。条件が真(True)のときだけ処理が実行されます。
@echo off
rem 1行形式(処理が1つのとき)
if exist "C:\work" echo workフォルダが存在します
rem 複数行形式(処理が複数のとき)
if exist "C:\work" (
echo workフォルダが存在します
echo 処理を続行します
)
rem else(条件が偽のとき)
if exist "C:\work" (
echo フォルダあり
) else (
echo フォルダなし
mkdir "C:\work"
)文字列比較
文字列を比較するには == を使います。変数は必ず " で囲むのが安全です(変数が空の場合にエラーを防ぐため)。
@echo off
set OS=Windows
rem 文字列の一致比較(大文字小文字を区別する)
if "%OS%"=="Windows" echo Windowsです
rem /i オプション:大文字小文字を区別しない(ignore case)
if /i "%OS%"=="windows" echo 大文字小文字無視で一致
rem 不一致の確認(NOT)
if not "%OS%"=="Linux" echo Linuxではありません
rem 変数が空かどうかチェック("x%VAR%"=="x" というパターンが安全)
set EMPTY=
if "%EMPTY%"=="" echo 変数は空です
if "x%EMPTY%"=="x" echo こちらも空チェックの定番パターン数値比較(equ・neq・lss・leq・gtr・geq)
数値の大小比較には専用の演算子を使います。英語の略語なので意味を知っておくと覚えやすいです。
| 演算子 | 意味(英語) | 例 |
|---|---|---|
| equ | Equal(等しい) | if %COUNT% equ 0 |
| neq | Not Equal(等しくない) | if %COUNT% neq 0 |
| lss | Less than(より小さい) | if %COUNT% lss 10 |
| leq | Less or Equal(以下) | if %COUNT% leq 10 |
| gtr | Greater than(より大きい) | if %COUNT% gtr 10 |
| geq | Greater or Equal(以上) | if %COUNT% geq 10 |
@echo off
set SCORE=85
if %SCORE% geq 90 (
echo 優
) else if %SCORE% geq 70 (
echo 良
) else if %SCORE% geq 50 (
echo 可
) else (
echo 不可
)ファイル・フォルダの存在確認(if exist)
if exist パス でファイルまたはフォルダの存在を確認できます。バッチファイルで最もよく使うif文パターンです。
@echo off
rem ファイルの存在確認
if exist "C:\work\data.txt" (
echo data.txtが見つかりました
) else (
echo data.txtが見つかりません
)
rem フォルダの存在確認(パスの末尾に \ を付けるとフォルダとして確認)
if exist "C:\work\" (
echo workフォルダがあります
) else (
mkdir "C:\work"
echo workフォルダを作成しました
)
rem ワイルドカードで「.txtファイルが1つでもあるか」確認
if exist "C:\work\*.txt" (
echo txtファイルがあります
)errorlevelの確認
errorlevel は直前に実行したコマンドの終了コードです。0は成功、1以上はエラーを示すことが多いです(コマンドによって異なります)。
@echo off
ping -n 1 8.8.8.8 >nul 2>&1
rem if errorlevel N は「Nより大きいか等しい」という意味(注意)
if errorlevel 1 (
echo pingが失敗しました(インターネット未接続?)
) else (
echo pingが成功しました
)
rem より明確な書き方(%errorlevel%変数を使う)
if %errorlevel% equ 0 (
echo 成功
) else (
echo 失敗 エラーコード: %errorlevel%
)注意:if errorlevel 1 は「errorlevelが1以上」という意味です。「1のとき」ではありません。%errorlevel% equ 1 を使う方が明確でわかりやすいです。
まとめ
- 文字列比較は == を使い、変数は “%VAR%” とダブルクォートで囲む
- /i オプションで大文字小文字を区別しない比較ができる
- 数値比較は equ/neq/lss/leq/gtr/geq を使う(英語の略語と意味を覚える)
- if exist でファイルやフォルダの存在確認ができる(フォルダは末尾に\)
- errorlevelは %errorlevel% equ 0 の形で確認するのが明確でわかりやすい
if errorlevel 1 が「1以上」という意味だと知らずに「1のとき」と思い込んで使い続け、予期しない動作に悩んだことがあります。%errorlevel% equ 1 という書き方の方が直感的で安全です。
hobbyshift管理人



コメント