2010-08-12
ERRORLEVELについてのメモ (1)
バッチファイルのERRORLEVELについてのメモです。2回の記事に分けます。*1 (前回: id:simply-k:20100813:1281675737)
ヘルプ
ERRORLEVELについてのヘルプは、以下のコマンドで参照できます。
ERRORLEVELの設定と参照
ERRORLEVELの設定
ERRORLEVELは、以下のような場合に設定されます。
ERRORLEVELの参照
ERRORLEVELの値は、通常の環境変数と同じように、%ERRORLEVEL%」または!ERRORLEVEL!(遅延展開の場合)で参照します。ただし、ユーザが明示的にERRORLEVELという名前の環境変数を定義した場合、これらの方法での参照はできなくなります。*2
動作確認
@echo off rem テスト1 (初期状態) echo [test-1] %ERRORLEVEL% rem テスト2 (コマンドの正常終了) copy NUL NUL > NUL echo [test-2] %ERRORLEVEL% rem テスト2 (コマンドの異常終了) copy > NUL echo [test-3] %ERRORLEVEL% rem テスト4 (再びコマンドの正常終了) copy NUL NUL > NUL echo [test-4] %ERRORLEVEL% rem テスト5 (存在しないコマンド) abcde 2> NUL echo [test-5] %ERRORLEVEL% rem テスト6 (バッチスクリプト) call :test_exit_b echo [test-6] %ERRORLEVEL% pause exit /b 0 rem 「exit /b」をテストするためのバッチスクリプト :test_exit_b exit /b 567
実行結果
[test-1] 0 [test-2] 0 [test-3] 1 [test-4] 0 [test-5] 9009 [test-6] 567
ERRORLEVELによる処理の分岐
説明
以下のような方法があります。
動作確認
@echo off rem テスト1 (「if ERRORLEVEL n」を使う) echo [test-1] call :set_errorlevel 1 if ERRORLEVEL 0 echo 0以上 if ERRORLEVEL 1 echo 1以上 if ERRORLEVEL 2 echo 2以上 if not ERRORLEVEL 0 echo 0未満 if not ERRORLEVEL 1 echo 1未満 if not ERRORLEVEL 2 echo 2未満 echo. rem テスト2 (%ERRORLEVEL ...%で判定する) echo [test-2] call :set_errorlevel 345 if %ERRORLEVEL% equ 345 echo 345 if %ERRORLEVEL% neq 345 echo 345以外 if %ERRORLEVEL% geq 300 echo 300以上 if %ERRORLEVEL% geq 400 echo 400以上 if %ERRORLEVEL% leq 300 echo 300以下 if %ERRORLEVEL% leq 400 echo 400以下 echo. rem テスト3 (callでバッチスクリプトを呼び出す) echo [test-3] call :set_errorlevel 3 call :sub_errorlevel_%ERRORLEVEL% call :set_errorlevel 1 call :sub_errorlevel_%ERRORLEVEL% echo. rem テスト4 (goto文を使う) echo [test-4] call :set_errorlevel 2 goto lbl_error_%ERRORLEVEL% :lbl_error_1 echo lbl_error_1を通りました goto end :lbl_error_2 echo lbl_error_2を通りました goto end :lbl_error_3 echo lbl_error_3を通りました goto end :end pause exit /b 0 rem ERRORLEVELを設定するサブルーチン :set_errorlevel exit /b %1 rem サブルーチン1 :sub_errorlevel_1 echo %0がcallされました exit /b 0 rem サブルーチン2 :sub_errorlevel_2 echo %0がcallされました exit /b 0 rem サブルーチン3 :sub_errorlevel_3 echo %0がcallされました exit /b 0
実行結果
[test-1] 0以上 1以上 2未満 [test-2] 345 300以上 400以下 [test-3] :sub_errorlevel_3がcallされました :sub_errorlevel_1がcallされました [test-4] lbl_error_2を通りました
続きは次回です。(前回: id:simply-k:20100813:1281675737)
*1:Windows XP SP3で確認しました。
トラックバック - http://d.hatena.ne.jp/simply-k/20100812/1281653517
リンク元
- 4813 https://www.google.co.jp/
- 4204 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=2&sqi=2&ved=0CDcQFjAB&url=http://d.hatena.ne.jp/simply-k/20100812/1281653517&ei=JWQ8T9DMHcTAmQXYntGWCw&usg=AFQjCNHezPl_Jl8QnxND2E51JME_U5Z02A
- 4177 http://www.google.co.jp/url?sa=t&rct=j&q=バッチ errorlevel&source=web&cd=3&ved=0CDcQFjAC&url=http://d.hatena.ne.jp/simply-k/20100812/1281653517&ei=EguETt2ND4bSiAKq0dHXDA&usg=AFQjCNHezPl_Jl8QnxND2E51JME_U5Z02A
- 2630 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cts=1331013863472&ved=0CCsQFjAA&url=http://d.hatena.ne.jp/simply-k/20100812/1281653517&ei=2ahVT-CXLebGmQXl0uDuCQ&usg=AFQjCNHezPl_Jl8QnxND2E51JME_U5Z02A
- 1897 http://www.google.co.jp/url?sa=t&rct=j&q=errorlevel&source=web&cd=24&ved=0CD0QFjADOBQ&url=http://d.hatena.ne.jp/simply-k/20100812/1281653517&ei=piGpTrDqBcuImQW2j9mkDw&usg=AFQjCNHezPl_Jl8QnxND2E51JME_U5Z02A
- 1335 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CDMQFjAB&url=http://d.hatena.ne.jp/simply-k/20100812/1281653517&ei=HWZHT4W6CInSmAXes-yLDg&usg=AFQjCNHezPl_Jl8QnxND2E51JME_U5Z02A
- 933 http://www.google.co.jp/url?sa=t&rct=j&q=コマンドプロンプト errorlevel&source=web&cd=4&ved=0CEQQFjAD&url=http://d.hatena.ne.jp/simply-k/20100812/1281653517&ei=DcmkTs74Jc-Mm
- 659 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cts=1331144899573&ved=0CEAQFjAC&url=http://d.hatena.ne.jp/simply-k/20100812/1281653517&ei=cadXT8bJF-PImQXKm63FDw&usg=AFQjCNHezPl_Jl8QnxND2E51JME_U5Z02A
- 613 http://search.yahoo.co.jp/search?p=バッチファイル /b+0&search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=
- 457 http://www.google.co.jp/search?q=バッチファイル exit+/b+errorlevel&hl=ja&rlz=1R2GZAZ_jaJP387&sa=2