start - 他バッチファイルの実行

にメンテナンス済み

別々で作成した複数のバッチファイルを、スケジュール実行用のバッチファイルから呼び出すといった操作は、バッチファイルを使う上でよくあるケースです。

また、バッチファイルから特定のexeファイルを実行するといった操作も、よくあるんじゃないでしょうか。

このページでは、バッチファイルから他のプログラムやバッチファイルを実行するstartコマンドについて、基本的な使い方からオプションの設定方法まで分かり易く説明しています。

start コマンドの基本的な使い方

startコマンドの基本的な使い方は以下の通りです。

start [タイトル] [実行するプログラムのパス] [プログラムに渡すパラメータ]

より詳細に表すと以下のようになりますが、多くの場合は上記のように、実行するファイルのタイトル、実行するファイル名、実行するファイルに渡すパラメータのみを指定します。

start [タイトル] [/d <実行するプログラムのパス>] [/i] [{/min | /max}] [{/separate | /shared}] [{/low | /normal | /high | /realtime | /abovenormal | /belownormal}] [/node <NUMA node>] [/affinity <HEX>] [/wait] [/b] [/machine <x86|amd64|arm|arm64>] [追加のコマンド・プログラム] [プログラムに渡すパラメータ]

startコマンドを使用すると、指定したパスのプログラムが実行されますが、実行されたプログラムの完了を待たずに、次の処理を実行します。

start コマンドの具体例

他のバッチファイルの実行

例として、直接実行するcaller.cmdと、呼び出されるcallee.cmdを用意します。

caller.cmdは以下のようになります。

caller.cmd
@echo off

echo caller.cmdを開始しました。

start callee.cmd

echo caller.cmdが終了しました。
文字化けが発生する場合

ファイルの文字コードがShift-JISとなっていることを確認してください。

同様に、callee.cmdは以下のようになります。

callee.cmd
@echo off

echo callee.cmdを開始しました。

rem 5秒待機
timeout /t 5 /nobreak >nul

echo callee.cmdが終了しました。

上記のように設定した上で、caller.cmdを実行すると、以下のようコマンドプロンプトのウィンドウがもう一つ表示され、それぞれのバッチファイルが実行されます。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>caller.cmd
caller.cmdを開始しました。
caller.cmdが終了しました。
C:\users\user>
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>
callee.cmdを開始しました。
callee.cmdが終了しました。

これらが実行される順番を並べると、以下のようになります。

caller.cmdを開始しました。
callee.cmdを開始しました。
caller.cmdが終了しました。
callee.cmdが終了しました。

caller.cmdが終了した後にcallee.cmdが終了しています。

caller.cmdは瞬時に終了するような処理ですが、callee.cmdでは、timeoutコマンドを使用して 5 秒間待機しています。

このように、startコマンドを使用すると、呼び出したバッチファイルの完了を待たずに、次の処理を実行します。

引数を渡してバッチファイルを実行する

次に、バッチファイルに対して引数を渡して実行する方法について説明します。

直接実行するcaller.cmdと、呼び出されるcallee.cmdを用意します。

caller.cmd
@echo off

echo caller.cmdを開始しました。

start callee.cmd 1

start callee.cmd 2

echo caller.cmdが終了しました。
callee.cmd
@echo off

echo callee.cmdを開始しました。

echo %1回目の実行です。

rem 5秒待機
timeout /t 5 /nobreak >nul

echo callee.cmdが終了しました。

上記のように設定した上で、caller.cmdを実行すると、2 つ新しいウィンドウが表示され、それぞれのバッチファイルが実行されます。

結果としては以下のようになります。

×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>
1回目の実行です。
callee.cmdが終了しました。
callee.cmdを開始しました。
×
コマンド プロンプトのアイコン
コマンド プロンプト
Microsoft Windows [Version xx.x.xxxxx.xxx]
(c) 2024 Ribbit App Development All rights reserved.
 
C:\users\user>
2回目の実行です。
callee.cmdが終了しました。
caller.cmdが終了しました。

呼び出したプログラムの完了を待つ

バッチファイルを呼び出す際、呼び出したバッチファイルの完了を待って、次の処理を実行したい場合は、startコマンドの/waitオプションを使用します。

/waitオプションを使用することで、呼び出したプログラムの完了を待ってから、次の処理を実行します。

もしくは、callコマンドを使用することでも、呼び出したプログラムの完了を待ってから、次の処理を実行することができます。

callコマンドについては、以下のページで詳しく説明しています。

練習問題

練習問題

以下のバッチファイルを、他のバッチファイルから呼び出す際、完了を待たずに次の処理を実行するコマンドはどれでしょうか。

sub.cmd
@echo off

echo sub.cmdを開始しました。

rem 5秒待機
timeout /t 5 /nobreak >nul

echo sub.cmdが終了しました。
回答がサーバーに送信されることはありません
#コマンドプロンプト #バッチファイル #引数 #コマンドライン #コマンド