導入
コマンドは実行後に「成功したか、失敗したか」を数値で残します。これが 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 以外(失敗)の値が出ます。成功時と見比べてみましょう。