INDEX
バッチ処理で sleep もどき
Windows DOS で指定時間の停止
unix とかでは sleep コマンドで一定時間停止(スリープ)させて続きの処理を行うことが出来るが、Windows のコマンドプロンプトには、これに相当するコマンドが用意されていません。
コマンドを作る
VCなどCのコンパイル環境があるなら、Windows.h をインクルードして Sleep 関数を呼び出すプログラムを作ってしまえばよい。
- Sleep 関数 - MSDN - Microsoft
Windows Script Host を利用する
Windows Script Host の WScript オブジェクトに Sleepメソッド がある。Sleepメソッドを呼び出すスクリプトを用意し、CScriptコマンドで実行する(WScriptコマンドでは終了を待たないので停止させられない)。
- Sleep メソッド - MSDN - Microsoft
単純に(都度スクリプトを書いて、実行、削除)
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
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
最終更新時間:2013年08月06日 18時18分52秒 指摘や意見などあればSandBoxのBBSへ。