Windowsバッチファイル

バッチファイルの条件分岐【if文・文字列比較・数値比較・ファイル存在チェック】

Windowsバッチファイル
記事内に広告が含まれています。

バッチファイルで「条件によって処理を変える」には 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)

数値の大小比較には専用の演算子を使います。英語の略語なので意味を知っておくと覚えやすいです。

演算子意味(英語)
equEqual(等しい)if %COUNT% equ 0
neqNot Equal(等しくない)if %COUNT% neq 0
lssLess than(より小さい)if %COUNT% lss 10
leqLess or Equal(以下)if %COUNT% leq 10
gtrGreater than(より大きい)if %COUNT% gtr 10
geqGreater 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管理人

コメント

タイトルとURLをコピーしました