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

バッチファイルでサブルーチンから処理を戻す際に exit /b を使いますが、誤用するとバッチ全体が終了してしまったり、
予期せぬ終了コードが返って呼び出し元の処理が止まってしまうことがあります。
本記事では、exit /b の正しい使い方と、よくある間違いの修正方法を解説します。

exit と exit /b の違い

exit はコマンドプロンプト自体を終了しますが、exit /b は「バッチ処理の現在のコンテキスト(サブルーチンや呼び出し元)」だけを終了し、呼び出し元に戻ります。

  • exit … cmd.exe を閉じる
  • exit /b … バッチファイル内の処理を終了して呼び出し元へ戻る

よくある誤り1:バッチ全体が終了してしまう

サブルーチンから呼び出し元に戻りたいのに、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 を原因とする予期せぬ終了を防ぎ、安定したバッチ処理を作成できます。