こんなことを知りたい人へ向けて書いています
- Windowsバッチファイル内で実行ファイル(拡張子が「.exe」のファイル)を実行する方法を知りたい
- バッチファイル内で実行ファイルを実行しているが、処理が終わらないうちにプログラムが先へ進んでしまい困っている
- 実行ファイルを実行するのに色々な方法があって、どれを使っていいか分からない。どんな違いがあるのかを知りたい
目次
その他の関連しそうな記事
目的によってexeファイルの実行方法を変える
バッチファイルでexeファイルを実行する方法には、2通りあります。
「call」コマンドを使うか、「start」コマンドを使うかです。
実行の目的によってどちらのコマンドを使用するかを選択する必要があります。その基準は、exeファイルの実行が終了しないうちに、バッチファイルのプログラムを先に進めてもよいか、進めてはいけないかです。
例えば、複数のexeファイルを同時に実行したい場合は、プログラムを先に進めないといけません。この場合は、「start」コマンドを使って実行ファイルを実行します。
逆に、複数のexeファイルの終了を待って順番に実行する必要がある場合は、プログラムを先に進めてはいけません。この場合は、「call」コマンドを使うことになります。
言葉では分かりづらいので、それぞれのコマンドについて、以下で実際に詳しくみていきます。
「call」コマンドでexeファイルを実行する
「call」コマンドはexeファイルに限らず、バッチファイルを呼び出すときにも用いるコマンドです。もう一度言いますが、「call」コマンドは実行するファイルの処理が終わるのを待って、次のコマンドへ移る動作をします。
使い方は、「call」コマンドの引数に実行したいコマンドを指定します。以下のような感じです。
1 |
call [実行したいexeファイル、もしくはバッチファイル] |
例えば、メモ帳を起動したい場合、バッチファイル(※このコードを「call_notepad.bat」ファイルへ書き込みます)は次のようになります。
1 2 3 |
@echo off call notepad.exe |
「notepad.exe」はメモ帳を起動する実行コマンドです。Windowsであれば、何もデフォルトで誰でも実行可能なコマンドです。
以下、コマンドプロンプト上から「call_notepad.bat」を実行した結果です。
メモ帳が起動したと思います。
次に、「call」コマンドは実行したファイルの処理が終わってから次のコードへ進むかを確認しましょう。
「call_notepad.bat」を編集して、電卓の起動(calc.exe)も追記します(このファイル名を「call_notepad_calc.bat」として保存しました)。
1 2 3 4 5 6 7 |
@echo off rem メモ帳を起動 call notepad.exe rem 電卓を起動 call calc.exe |
これを実行すると、はじめにメモ帳が立ち上がります。メモ帳を閉じると、次に電卓が起動します。
このように「call」コマンドでは、指定したexeファイルが終了するまでバッチファイルのプログラムの処理を一時停止し待機させます。つまり、複数のexeファイルを同時に実行することはできません。
「call」コマンドを使う必要があるのは、1つ目に実行した実行ファイルで何か新しいデータやファイルが作成され、そのデータやファイルをその後の処理で使用する必要があるときなどです。使用するデータやファイルが作成される前に次の処理に進んでしまうとエラーが起きてしまうためです。
「start」コマンドでexeファイルを実行する
次は、「start」コマンドによるexeファイルの実行です。「start」コマンドは指定した実行ファイルの処理の終了を待たずにバッチファイルの処理を先へ進ませます。
「call_notepad_calc.bat」バッチファイルの「call」コマンドを「start」コマンドに変更してみましょう(「start_notepad_calc.bat」というファイルに以下のコードを書き込みます)。
1 2 3 4 5 6 7 |
@echo off rem メモ帳を起動 start notepad.exe rem 電卓を起動 start calc.exe |
これを実行すると、メモ帳と電卓が同時に立ち上がります。
つまり、「start」コマンドは指定したexeファイルを実行した後、そのexeファイルの終了を待たずに次のコマンドへ進んだのです。
同時起動の必要がある場合、または同時起動しても構わない場合は「start」コマンドを使用します。
ただし、例えば一回目のexeファイルの実行で得た結果を、2回目のexeファイルや続くコマンドで利用しなければいけない場合は、1回目のexeファイルの終了を待たなければいけません。このような場合には、「call」コマンドを使用する必要があります。
kadai4-2