バッチファイルから別のバッチファイルを起動する方法
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 | 異なる | 待つ | 同一 |