【bat】バッチファイルでファイルの存在チェックと条件分岐を行う方法

bat

バッチファイルで自動処理を行う際、特定のファイルが存在するかどうかを確認して処理を分けたい場面はよくあります。例えばログファイルがある場合だけ追記する、設定ファイルがなければ新規作成する、といったケースです。本記事では「ファイルの存在チェック」と「if文による条件分岐」の基本から応用までを解説します。

基本的な存在チェック

バッチファイルでは if exist を使ってファイルの有無を判定します。ファイルが存在する場合と存在しない場合で処理を分岐させられます。

@echo off
setlocal

if exist "C:\test\sample.txt" (
    echo ファイルが存在します
) else (
    echo ファイルが存在しません
)

endlocal
pause

拡張子やパターンを使ったチェック

ワイルドカードを利用すれば、ディレクトリ内に特定の拡張子のファイルが存在するかどうかを判定できます。

@echo off
if exist "C:\logs\*.log" (
    echo ログファイルが存在します
) else (
    echo ログファイルはありません
)
pause

ディレクトリの存在チェック

ファイルだけでなくフォルダの存在も if exist で確認できます。末尾にバックスラッシュを付けると意図が明確になります。

@echo off
if exist "C:\backup\" (
    echo バックアップフォルダが存在します
) else (
    echo バックアップフォルダがありません
)
pause

処理の条件分岐

ファイルの有無によって実際の処理を切り替える例です。存在すれば読み込み、なければ新規作成するように分岐させます。

@echo off
set "file=C:\data\config.ini"

if exist "%file%" (
    echo 設定ファイルを読み込みます...
    type "%file%"
) else (
    echo 設定ファイルを新規作成します...
    echo [default] > "%file%"
)
pause

エラー処理への応用

存在チェックを組み合わせれば、エラーを回避したり、処理の安全性を高められます。例えばコピーや削除の前に存在を確認してから実行すると、スクリプトが途中で止まることを防げます。

@echo off
set "src=C:\temp\input.txt"
set "dst=C:\work\input.txt"

if exist "%src%" (
    copy "%src%" "%dst%"
    echo コピー完了
) else (
    echo コピー元のファイルがありません
)
pause

まとめ

バッチファイルでファイルの存在チェックを行うには if exist を使います。単一ファイルだけでなくワイルドカードやディレクトリにも対応可能で、条件分岐と組み合わせれば柔軟な処理を記述できます。コピーや削除などでエラーを防ぐためにも、存在チェックを取り入れるのが実用的です。