【bat】exit /b の使い方を誤って予期せぬ終了になるときの修正方法

バッチファイルでサブルーチン処理を抜けたいときに exit /b を使いますが、使い方を誤るとバッチ全体が終了したり、意図せぬエラーコードが返って予期せぬ挙動を引き起こすことがあります。
本記事では、exit /b の正しい使い方と、代表的な誤りの修正方法を解説します。

exit と exit /b の違い

exitcmd.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 を書く

これらを守ることで、バッチファイルの予期せぬ終了や誤ったエラー判定を防ぎ、安定した処理を実現できます。