【bat】前回処理の状態を記録して次回に引き継ぐ方法|ログファイルとフラグ管理の実践

【bat】前回処理の状態を記録して次回に引き継ぐ方法|ログファイルとフラグ管理の実践 bat

バッチファイルを使った定期処理や業務自動化の現場では、「前回の処理が成功したかどうか」「最後に処理した日時はいつか」といった状態を次回に引き継ぎたいケースが多くあります。

この記事では、ログファイルやフラグファイルを活用して、前回の処理結果を記録し、それをもとに次回の動作を制御する方法を解説します。

状態を保持する代表的な方法

バッチファイルでは、状態を記録・引き継ぐ手段として主に次の2つが使われます。

  • ログファイル:処理の詳細な記録やエラーログなどを残す
  • フラグファイル:処理の成否やステータスを簡易に記録する

これらを組み合わせることで、処理の継続・スキップ・再試行など柔軟なフローが実現できます。

フラグファイルで状態を判定する方法

フラグファイルは単なる空のテキストファイルで構いません。前回成功した場合のみ success.flag を作成し、次回処理開始時にそれを判定する構成です。

@echo off
set FLAGFILE=C:\Batch\success.flag

if exist "%FLAGFILE%" (
  echo 前回の処理は成功していました。
) else (
  echo 前回の処理は失敗または未実行です。
)

rem 処理開始
echo 処理を実行中...

rem 成功したらフラグを作成
echo 成功フラグを作成します...
echo done > "%FLAGFILE%"

echo done > success.flag のように中身を書いてもいいですし、単に空ファイルを type nul > success.flag で作る方法もあります。

ログファイルにステータスと日時を記録する

より詳細に処理履歴を残したい場合は、ログファイルに処理開始・終了・ステータス・日時を記録します。

@echo off
set LOGFILE=C:\Batch\process.log

echo [%DATE% %TIME%] 処理開始 >> "%LOGFILE%"

rem 実処理部分(例)
echo データ処理中...

if %ERRORLEVEL%==0 (
  echo [%DATE% %TIME%] 処理成功 >> "%LOGFILE%"
) else (
  echo [%DATE% %TIME%] 処理失敗 (エラーコード: %ERRORLEVEL%) >> "%LOGFILE%"
)

ログを日次で分けたい場合は、ログファイル名に日付を含めて動的に生成するとよいでしょう。

set LOGFILE=C:\Batch\log_%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%.txt

前回実行日時をファイルに保存して次回利用

前回の処理日時を記録し、次回に読み込んで処理のスキップなどに活用する例も紹介します。

@echo off
set STATEFILE=C:\Batch\last_run.txt

if exist "%STATEFILE%" (
  set /p LASTRUN=<"%STATEFILE%"
  echo 前回の実行日時: %LASTRUN%
)

rem 処理開始

rem 実行日時を記録
echo %DATE% %TIME% > "%STATEFILE%"

set /p を使ってファイルの中身を読み込めば、前回の日時なども取得可能です。

まとめ

バッチ処理で状態管理を行うことで、次のようなメリットが得られます。

  • 失敗時の再実行や再試行条件を制御できる
  • 処理ログから原因究明が可能になる
  • 重複実行や未実行の判定ができる

簡単な仕組みでも、運用の信頼性を大きく高めることができます。日々の業務に取り入れて、より堅牢な自動化処理を実現してみてください。