やりたいこと検索

バッチファイルで戻り値を得る「exit /b」

 

こんなことを知りたい人へ向けて書いています

  • 「exit /b」コマンドの使い方を知りたい方
  • Windowsバッチファイルでサブルーチンなどから戻り値を得たい方
  • サブルーチンの実行後、「errorlevel」に入っている値を利用したい方
  • 「exit」と「exit /b」の違いを知りたい方

その他の関連しそうな記事

 

目次

 

「exit /b」の基本的な解説(「exit」との違いなど)

「eixt /b」と「exit」はどちらも基本的にバッチファイルを終了するためのコマンドです。

例えば、以下のバッチファイル「stop_process_exitb.bat」のように処理を終了したいところに、これらのコマンドを記入するとその場所で処理が中止されます。

このバッチファイルは7行目の「exit /b」で処理が止まるため、4行目の「echo」コマンドによるコマンドプロンプト画面への表示はされますが、最終行での「echo」コマンドによる表示はされないはずです。

以下がコマンドプロンプト上で実行した結果になります。

期待通り、「exit /b」で処理が止まり、最終行での出力は表示されていません。

 

では、7行目の「exit /b」を「exit」としてみましょう。以下がそのバッチファイル「stop_process_exit.bat」です。

これを同様に実行してみて下さい。

…どうでしょうか?コマンドプロンプト画面が消えてしまったと思います。このように、「exit」コマンドは処理を終了させて、コマンドプロンプトまで消してしまう機能を持っています

なので、処理後のコマンドプロンプト画面に表示されたメッセージなどを確認したい場合には、「exit /b」を使用してコマンドプロンプト画面が消えないようにすることが必要でしょう。

 

呼び出し先のバッチファイルから呼び出し元のバッチファイルに戻るには「exit /b」を使う

上のバッチファイルの例では「exit」と「exit /b」コマンドの違いはコマンドプロンプト画面が消えるか、消えないかの違いだけで、処理の内容自体には違いはありませんでした。

しかし、バッチファイルからバッチファイルを呼び出すような処理を行う場合、「exit」と「exit /b」とでは処理内容にまで影響が出るので注意が必要です。

例を見てみましょう。以下のような呼び出し元のバッチファイル(親バッチ)と呼び出し先(子バッチ)を考えます。

「calling.bat」(親バッチ)は以下の通りです。

一方、「called.bat」(子バッチ)は以下の通りです。

親バッチ「calling.bat」では、4行目でコマンドプロンプト画面にメッセージを出力し、8行目の「call」コマンドで子バッチ「called.bat」を呼び出しています。また、親バッチの最後の行でも再びコマンドプロンプト画面にメッセージを出力しています。

呼び出された子バッチでは、4行目でコマンドプロンプト画面へのメッセージ出力を行い、最終行の「exit」で処理を終了しています。

それぞれ「echo」コマンドの後には「pause」コマンドによって処理を一時停止しています。

さて、この親バッチ「calling.bat」を実行したら、コマンドプロンプト画面へはどのようなメッセージ出力となるでしょうか?以下、実行結果です。

ここまで進めて、エンターを押し処理を進めると、コマンドプロンプト画面が閉じます。これは、子バッチに入って4行目の出力の後、最終行の「exit」によって処理が終了したためです。したがって、親バッチの最後の「echo」コマンドには処理が到達しなかったということです。

では、「called.bat」(子バッチ)を以下のように変更して実行するとどうでしょうか?

最終行の「exit」コマンドを「exit /b」としました。以下、実行結果です。

今度は親バッチの最後の「echo」コマンドによる出力が表示されました。このように、「exit /b」コマンドは現在実行しているバッチファイルの処理を終了させる機能を持っています。一方、「exit」コマンドはすべてのバッチファイルの処理を終了させる機能を持っているのです。

したがって、親バッチから子バッチを呼び出し、再び親バッチに戻りたい場合は、「exit /b」を使用する必要があります。

 

このことは、バッチファイルを呼び出す場合だけではなく、サブルーチンを呼び出す場合も同様です。例えば、以下のようなバッチファイル「exitb_subroutine.bat」です。

7行目で「called」サブルーチンを呼び出しています。サブルーチンは16行目からであり、サブルーチンの終了には「exit /b」を使用しています(最終行)。これで、サブルーチンの処理が終了すれば、メインプログラムの処理に戻ります。以下、実行結果です。

「exit /b」の代わりに「exit」を使用した場合、メインプログラムには戻らず、ここで全ての処理が終了します。

このような違いに気を付けて「exit」と「exit /b」を使い分けましょう。

 

バッチファイルやサブルーチンからの戻り値を利用する「exit /b [数値]」

「exit /b」コマンドを使って、呼び出したバッチファイルやサブルーチンからメインのプログラムへ戻るとき、戻り値を指定することができます。

戻り値とは、呼び出したバッチファイルやサブルーチンからメインのプログラムへ戻るときにメインのプログラムへ引き渡せる値のことです。実際に以下のバッチファイルを見てみましょう。前節の「exitb_subroutine.bat」を少し編集して「exitbnum_subroutine.bat」を作りました。

注目すべきは2箇所です。1箇所目はこのバッチファイルの最終行「exit /b 22」コマンドです。これまでの「exit /b」の後に「22」を追記しました。これで22という値を戻り値として、メインプログラムに返すことができます。ここでは22を指定していますが、もちろんこの数字はどんなものでも構いません。負の数でもオッケーです。ただし、必ず数値を指定します。文字列は指定できません。

注目すべき2箇所目は、13行目の変数「errorlevel」です。メインプログラムで戻り値を参照するには変数「errorlevel」の中を見ます。ここに戻り値が格納されていますので、「%errorlevel%」とすれば参照できます。

以下、実行結果です。

変数「errorlevel」に戻り値「22」が代入されていることが分かります。

バッチファイルから呼び出したバッチファイルを扱うときも同様です。「exit /b [数値]」とすることで戻り値を指定することができます。

戻り値はサブルーチンや子バッチからの情報をメインプログラムに受け渡すときに使用しましょう。「if」コマンドを使って状況によって戻り値を変化させることで、より高度な処理が可能になるはずです。

Windowsバッチファイル初心者へ向けた入門書を作成しました


Windowsバッチファイル初心者の方へ向けた入門書(PDF)を作成しました。


・初めてWindowsバッチファイルを勉強してみようと思っている方

・使ったことはあるが一から基礎を学び直したい方


へ向けて丁寧な解説を行っています。


「全くプログラムを知らない方でも、この入門書を読んだ後には、Windowsバッチファイルの中級者レベルになれるように」をコンセプトに執筆したものです。


この本を読めば、バッチファイルを使ったファイルやフォルダの操作に関しては一通りのことができるようになります。そうなればもう十分中級者と呼べるレベルですので、あとは自分のやりたいことを実現しようとする中で徐々に知識を蓄えていくだけですぐに上級者へなれるでしょう。


詳しくみる

関連ページ

コメントを残す