バッチファイルでサブルーチン処理を抜けたいときに exit /b
を使いますが、使い方を誤るとバッチ全体が終了したり、意図せぬエラーコードが返って予期せぬ挙動を引き起こすことがあります。
本記事では、exit /b
の正しい使い方と、代表的な誤りの修正方法を解説します。
exit と exit /b の違い
exit
は cmd.exe 自体を終了します。一方、exit /b
は 現在のバッチ処理やサブルーチンの実行だけを終了し、呼び出し元に戻ります。
exit
… コマンドプロンプトごと閉じてしまうexit /b
… バッチの処理を中断し、呼び出し元へ戻る
誤り1:exit を使ってしまいバッチ全体が終了する
サブルーチンの終端で exit
と書くと、バッチ全体が終了してしまい後続処理が実行されません。
@echo off
call :sub
echo この行は実行されない
exit /b
:sub
echo サブルーチン処理
exit &rem 誤り:バッチ全体が終了
修正方法: サブルーチンから戻りたいときは必ず exit /b
を使います。
:sub
echo サブルーチン処理
exit /b
誤り2:エラーコードが意図せず伝播する
exit /b
は数値を指定しないと直前のエラーコード(%ERRORLEVEL%)を返します。
そのため、正常終了なのにエラーコードが引き継がれて呼び出し元で「失敗」と判定されることがあります。
@echo off
call :sub
echo ERRORLEVEL=%ERRORLEVEL%
exit /b
:sub
rem 直前のエラーがそのまま返る
exit /b
修正方法: 正常終了の場合は exit /b 0
を明示的に指定しましょう。
:sub
rem 正常終了を明示
exit /b 0
誤り3:exit /b を忘れて処理が流れてしまう
サブルーチンの終端に exit /b
を書き忘れると、処理が次のラベルにそのまま流れて実行される場合があります。
@echo off
call :sub
echo 呼び出し元に戻るはず
exit /b
:sub
echo サブルーチン処理
rem exit /b を忘れると次のラベルへ流れる
:next
echo ここも実行されてしまう
修正方法: サブルーチンの最後には必ず exit /b
を入れて処理を明示的に終了させます。
まとめ
exit /b
の誤用でバッチ全体が終了したり、エラーコードが意図せず伝播するのはよくある落とし穴です。
ポイントは次の通りです。
- サブルーチンから戻るときは
exit /b
を使用する - 正常終了時は
exit /b 0
と明示する - サブルーチンの末尾には必ず
exit /b
を書く
これらを守ることで、バッチファイルの予期せぬ終了や誤ったエラー判定を防ぎ、安定した処理を実現できます。