Windowsバッチファイル

バッチファイルのエラーハンドリング【errorlevel・exit /b・エラー時の処理分岐】

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

バッチファイルでのエラー処理を解説します。errorlevel・exit /b・エラー時の分岐処理を理解すれば、堅牢なバッチが作れます。

errorlevelとは?

errorlevelはコマンドの実行結果を表す数値です。0は成功、1以上はエラーを意味します。直前に実行したコマンドの結果が自動的に設定されます。

@echo off
copy source.txt dest.txt
if errorlevel 1 (
    echo エラー: コピーに失敗しました
    exit /b 1
)
echo コピー成功

errorlevelの確認方法

書き方意味
if errorlevel 1errorlevelが1以上の場合(エラー)
if not errorlevel 1errorlevelが0の場合(成功)
if %ERRORLEVEL%==0errorlevelが0と完全一致
echo %ERRORLEVEL%errorlevelの数値を表示

exit /bでエラーコードを返す

@echo off
setlocal

call :checkFile "C:\data\input.txt"
if errorlevel 1 (
    echo 処理を中断します
    pause
    exit /b 1
)
echo 正常終了
pause
exit /b 0

:checkFile
if not exist %1 (
    echo エラー: %1 が見つかりません
    exit /b 1
)
echo ファイル確認OK: %1
exit /b 0

実践:エラー時にログを残す

@echo off
set LOGFILE=error_log.txt

robocopy C:\data D:\backup /e
if %ERRORLEVEL% GEQ 8 (
    echo %DATE% %TIME% バックアップ失敗 ERRORLEVEL=%ERRORLEVEL% >> %LOGFILE%
    echo エラーが発生しました。ログを確認してください。
) else (
    echo %DATE% %TIME% バックアップ成功 >> %LOGFILE%
    echo バックアップ完了
)
pause

robocopyはerrorlevel 8以上が実際のエラーです。1〜7は「コピーされたファイルあり」「スキップあり」などの情報的なコードです。

まとめ

  • errorlevelはコマンド実行後の結果コード(0=成功、1以上=エラー)
  • if errorlevel 1 でエラーチェックができる
  • exit /b 数値 でエラーコードを呼び出し元に返せる
  • エラー時はログファイルに記録する習慣をつける
  • 次の記事ではログ出力とデバッグを学ぶ

コメント

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