Categories: Windows

バッチファイルを終了させる「exit」と「exit /b」の違い

バッチファイルを作成していると、処理を終了させたい場面が出てきますよね。そんな時に使うのが exit コマンドです。

しかし、exit には /b オプションがあり、これを使う場面が多いことをご存知でしょうか?

今回は、exit コマンドの基本的な使い方から /b オプションとの違い、さらに戻り値の設定方法まで詳しく解説します。

「exit」と「exit /b」の違い

exitコマンドの違いは以下の通りですが、多くの場合「exit /b」で処理を終わらせることが多いです。

  • exit(オプション無し):コマンドプロンプトを終了させる
  • exit /b:「exit /b」が記述されたバッチファイルを終了させる

以下、サンプルとなるバッチファイルを元に、違いを説明します。

@echo off

call child.bat
echo Finish child.bat

pause
@echo off
echo Execute child.bat
exit
@echo off
echo Execute child.bat
exit /b

parent.batからchild.batを呼び出して実行します。

このときにchild.batの最後の文を「exit」と記述した場合と、「exit \b」と記述した場合について、どのような挙動をするか確認します。

まず、単に「exit」と記述した場合は、その時点でコマンドプロンプトが終了してしまいます。結果、「echo Finish child.bat」が実行されないことに加えて、一瞬でコマンドプロンプトが消えてしまいます。

一方、「exit /b」と記述した場合は、「child.bat」がその時点で終了します。よって、処理は「parent.bat」に戻るので、「echo Finish child.bat」も実行されますし、pauseで処理待ちも発生します。

つまり、callコマンドで子バッチを呼び出し、子バッチの終了を記述する(子バッチを終了して親バッチの処理に戻る)場合には、「exit /b」と記述する必要があります。

バッチファイルや関数に戻り値を与える「exit /b [数値]」

呼び出したバッチファイルや関数からメインのプログラムへ戻るときに、戻り値を設定したい場合には、exit \bの後に数値を指定します。この戻り値はERRORLEVELという環境変数に格納されます。

@echo off

call child.bat
echo %errorlevel%

pause
@echo off

echo Execute child.bat

exit /b 10

上記の例では、戻り値として「10」を指定しています。そして戻り値を参照する方法は、「%errorlevel%」と記述し、errorlevel変数の値を参照することで実現されます。

上記のサンプルプログラムでは「echo %errorlevel%」とすることで、戻り値をコンソールに表示しています。

よって実行すると以下のような結果となります。

まとめ

  • exitコマンドは、バッチファイルやコマンドプロンプトを終了させるために使用します。
  • /bオプションを付けることで、現在実行中のバッチファイルのみを終了できます。
  • exit /b [数値]で戻り値を設定し、呼び出し元のバッチファイルで処理を分岐させることも可能です。

exitコマンドを正しく理解し、/bオプションや戻り値を活用することで、より複雑な処理を実現するバッチファイルを作成できるようになります。

Haruoka