本文へスキップ
BecomeCoder

バッチファイルコース · 第5章 ファイル操作と実践 · レッスン18

errorlevel でエラーを判定する

導入

コマンドは実行後に「成功したか、失敗したか」を数値で残します。これが errorlevel(終了コード) です。これを見れば、処理が失敗したときだけ対処する、といった賢いバッチが書けます。

説明

多くのコマンドは、成功すると 0、失敗すると 0 以外 の値を errorlevel に残します。第2章で出た &&(成功したら)や ||(失敗したら)は、この仕組みを使っています。

直接調べるには、特別な変数 %ERRORLEVEL% を見ます。

@echo off
copy data.txt backup.txt

if %ERRORLEVEL%==0 (
    echo コピー成功
) else (
    echo コピー失敗(コード %ERRORLEVEL%
)

古くからある書き方 if errorlevel N は「errorlevel が N 以上 なら」という意味です(N ちょうどではない点に注意)。「エラーがあったら=1以上なら」を判定する定番の形です。

@echo off
ping -n 1 example.com > nul
if errorlevel 1 (
    echo ネットワークに繋がりませんでした
) else (
    echo 疎通OK
)

自分のバッチから終了コードを返すには exit /b コード を使います。呼び出し元は、その値を %ERRORLEVEL% で受け取れます。

@echo off
if not exist "設定.ini" (
    echo 設定ファイルがありません
    exit /b 1
)
echo 設定を読み込みました
exit /b 0

チェックのタイミング %ERRORLEVEL% は「直前のコマンド」の結果です。echo などをはさむとその成否で上書きされてしまうので、判定は 調べたいコマンドの直後 に書きましょう。

やってみよう

copy 存在しないファイル.txt out.txt を実行した直後に echo %ERRORLEVEL% を打つと、0 以外(失敗)の値が出ます。成功時と見比べてみましょう。