Waitfor コマンドは Windows Server 2003 からの新しいコマンドで、シグナルを用いて複数のコンピュータの同期をとることができる。
構文1:シグナルを待つ
waitfor [/t TimeoutInSeconds] SignalName
SignalName という名のシグナルを待つ。シグナルが来るか、TimeoutInSeconds 秒経過するとこのコマンドは終了する。「/t TimeoutInSeconds」を省略したときは無期限にシグナルを待機し続ける。
構文2:シグナルを送る
waitfor [/s Computer [/u [Domain\]User [/p [Password]]]] /si SignalName
/s シグナルの送り先コンピュータ名またはIPを指定。規定値はローカルコンピュータ。
/si 送るシグナルの名前を指定。
/u 指定したユーザの権限で実行。 /p でパスワードも指定する。
これを使うと複数のバッチを同期させたり、複数のコンピュータの同期をバッチで行うことが可能である。
以前は同様のことをしたいときは、テンポラリのファイルを作成するなどして実現していたと聞く。 waitfor コマンドを使うと、ゴミも残らず、タイムアウトも指定できるなど利点が大きい。
例:
comp1 で foo1.bat, comp2 で foo2.bat を実行する。 foo2.bat の終了を foo1.bat の中で待つ。
##### comp1 / foo1.bat #####
echo comp2 の foo2.bat を待ちます。
waitfor foosignal
echo comp2 の foo2.bat は終わったようだ。
##### comp2 / foo2.bat #####
echo foo2.bat がスタートします。
////// 時間のかかる仕事 //////
waitfor /s comp1 /si foosignal