{{category Command Prompt,nolink}} バッチ処理で sleep もどき !!!Windows DOS で指定時間の停止 unix とかでは sleep コマンドで一定時間停止(スリープ)させて続きの処理を行うことが出来るが、Windows のコマンドプロンプトには、これに相当するコマンドが用意されていません。 !!コマンドを作る VCなどCのコンパイル環境があるなら、Windows.h をインクルードして [Sleep 関数|http://msdn.microsoft.com/ja-jp/library/cc429358.aspx]を呼び出すプログラムを作ってしまえばよい。 * Sleep 関数 - MSDN - Microsoft ** http://msdn.microsoft.com/ja-jp/library/cc429358.aspx !!Windows Script Host を利用する Windows Script Host の WScript オブジェクトに [Sleepメソッド|http://msdn.microsoft.com/ja-jp/library/cc364427.aspx] がある。Sleepメソッドを呼び出すスクリプトを用意し、CScriptコマンドで実行する(WScriptコマンドでは終了を待たないので停止させられない)。 * Sleep メソッド - MSDN - Microsoft ** http://msdn.microsoft.com/ja-jp/library/cc364427.aspx !単純に(都度スクリプトを書いて、実行、削除) ECHO WScript.sleep 300000 > sleep.vbs cscript.exe //nologo sleep.vbs > NUL DEL sleep.vbs > NUL !バッチ+JScript(WHS) sleep.cmd (sleep.js ではない) で保存する。バッチファイルから呼び出す場合は「call sleep.cmd 10」の様に呼び出す必要があるが、自己で cscript を呼び出し引数の秒数だけスリープする。 @set @temp=0/* @cscript.exe //e:jscript //nologo "%~f0" %1 @goto :eof */ WScript.Sleep(WScript.Arguments(0)*1000); DOSは、1行目SETコマンドで変数にセット、2行目で cscript で自身を jscript として実行、3行目で終わりに飛ぶ。JSは、1行目が条件付きコンパイルの変数セット、/*〜*/ の範囲のDOSコマンドはコメント、5行目の Sleep を実行。 *参考 ** WindowsXP標準機能だけでスリープ(コマンド)の実装 | trash-area.com *** http://trash-area.com/archives/219 !!timeout コマンドを利用する Windows Vista / Windows Server 2003 以降の Windows OS には、“timeout.exe” というコマンドが用意されている。 このコマンドは、指定した秒数だけカウントダウンしながら待つかユーザが何かキーを押すまで待ち、どちらかを満たした場合にプログラムを終了する。 TIMEOUT [/T] タイムアウト [/NOBREAK] 説明: このユーティリティでは、タイムアウトのパラメーターを指定して、一定の時間 (秒) が経過するまで、またはユーザーが任意のキーを押すまで、プログラムを待機 させることができます。 キー入力を無視するためのパラメーターを指定することもできます。 パラメーター一覧: /T タイムアウト 待機する時間 (秒) を指定します。 有効な範囲は -1 から 99999 秒までです。 /NOBREAK キーが押されても無視し、指定時間待ちます。 /? このヘルプを表示します。 注意: タイムアウト値 -1 は、キーが押されるまで無限に待機することを意味します。 例: TIMEOUT /? TIMEOUT /T 10 TIMEOUT /T 300 /NOBREAK TIMEOUT /T -1 REM 10秒間待つ TIMEOUT /T 10 /NOBREAK >NUL !!ping コマンドの要求の待ち時間を利用する ping コマンドで複数回のエコー要求を投げる場合に約1秒間の間隔を置いて要求を行うので、この待ち時間を利用する。エコー要求数は、-n オプションで指定出来る。各要求の間隔が1秒間なので指定する値は、待つ秒数の+1回を指定する。 REM 10秒間待つ ping -n 11 127.0.0.1 >NUL ping コマンド自体は昔からあるので、timeout の様にOSの制限は少ない。ただし、時間の精度はあまり良くない。 !!ping コマンドの応答を待つタイムアウト時間を利用する ping コマンドで存在しない(応答を返さない)ホストにエコー要求し、応答を待つタイムアウト時間を指定して、タイムアウトになるまでの待ち時間を利用する。タイムアウト時間は -w オプションでミリ秒単位で指定出来る。 REM 10秒間待つ ping -n 1 -w 10000 192.0.2.1 >NUL