8ttyan’s blog

コンピュータ関係の小ネタ

バッチファイルから別のバッチファイルを起動する方法

Windowsでバッチファイルから別のバッチファイルを起動する方法として、startとcallがあります。動作の違いは、

  • startで起動すると、別のプロセスで起動して、終了を待ちません

  • callで起動すると、同一のプロセスで起動して、終了を待ちます

となります。次の処理を待ちたい時は、callで起動することになりますが、同一プロセスのため、呼び出された側でsetした変数が呼び出し側に引き継がれてしまいます。Linuxでいうところのsourceに相当する動作となります。

異なるプロセスで起動しつつ終了を待つ(Linuxでいうところの./hoo.shという起動方法)をするには、

start/b/wait cmd /c foo.bat

とやると良いようです。

/bは同じウインドウで開くオプションです。

/waitはバッチファイルの終了を待ちます。

cmd /cをつけないと、ダブルクリックでバッチファイルを起動した時に、呼び出し側の処理が終了したときにコンソールが閉じません。

ちなみに、Windowsコマンドプロンプトでは、コマンド名とオプションの間のスペースは不要なため、start/b/waitと記述することができます。ただし、cmd /cのところはスペースを入れないとなぜか正しく動きません。

Windowsにおけるバッチファイルの起動方法をまとめると次のようになります。

Windows Linuxで相当する動作 プロセス 終了待ち ウインドウ
call foo.bat source bar.sh 同一 待つ 同一
start foo.bat - 異なる 待たない
start/b cmd /c foo.bat ./bar.sh & 異なる 待たない 同一
start/b/wait cmd /c foo.bat ./bar.sh 異なる 待つ 同一