バッチファイルでは、処理の実行中に発生したエラーを自動で記録し、後で確認できるようにログファイルとして保存することができます。特に定期実行するバッチ処理では、画面に表示されるだけのエラーは見落としやすいため、ログを残す仕組みを組み込んでおくと運用が効率的になります。ここではエラーログを自動収集して保存する方法を解説します。
標準出力とエラー出力の違い
コマンドの実行結果には2種類の出力があります。通常のメッセージを出す「標準出力(stdout)」と、エラーを出す「標準エラー出力(stderr)」です。バッチファイルではリダイレクトを使ってそれぞれをログに保存できます。
:: 標準出力をログに保存
dir C:\ > success.log
:: エラー出力をログに保存
dir Z:\ > error.log 2>&1
この例では存在しないドライブZ:\を指定しているため、エラーメッセージがerror.logに書き込まれます。
エラーのみをログに保存する
エラー出力(stderr)だけを別ファイルに保存するには「2>」を使います。
@echo off
setlocal
:: 成功出力は画面、エラーはファイルに記録
copy C:\test\file.txt D:\backup\ 2> error.log
endlocal
pause
成功と失敗を分けてログに記録する
stdoutとstderrを別々のログファイルに分けて保存することも可能です。
@echo off
setlocal
:: 成功メッセージをsuccess.log、エラーメッセージをerror.logへ
robocopy C:\test D:\backup /E > success.log 2> error.log
endlocal
pause
実行日時をログに残す
ログを確認しやすくするために、処理の実行日時も一緒に記録しておくと便利です。
@echo off
setlocal
set "log=error_%date:~0,10%_%time:~0,2%%time:~3,2%.log"
echo [%date% %time%] バッチ処理を開始します >> "%log%"
copy C:\test\file.txt D:\backup\ 2>> "%log%"
echo [%date% %time%] バッチ処理を終了しました >> "%log%"
endlocal
pause
この例ではファイル名に日付と時刻を付け、処理の開始と終了も追記しています。
複数コマンドのエラーログをまとめる
大きなバッチ処理では複数のコマンドを実行します。それぞれのエラーを1つのログファイルに集約しておくと管理しやすくなります。
@echo off
setlocal
set "log=errorlog.txt"
echo ==== 実行開始 [%date% %time%] ==== >> "%log%"
copy C:\test\file1.txt D:\backup\ 2>> "%log%"
del C:\test\file2.txt 2>> "%log%"
xcopy C:\test\*.txt D:\backup\ 2>> "%log%"
echo ==== 実行終了 [%date% %time%] ==== >> "%log%"
endlocal
pause
まとめ
バッチファイルでエラーログを自動収集するには「リダイレクト」を使うのが基本です。2>でエラー出力を指定し、ログファイルに追記(>>)することで複数のエラーをまとめられます。日付や時刻を組み合わせておけば、実行履歴を管理しやすくなり、トラブルシューティングに役立ちます。