トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

WinBat/sleep

INDEX

バッチ処理で sleep もどき

Windows DOS で指定時間の停止

unix とかでは sleep コマンドで一定時間停止(スリープ)させて続きの処理を行うことが出来るが、Windows のコマンドプロンプトには、これに相当するコマンドが用意されていません。

 コマンドを作る

VCなどCのコンパイル環境があるなら、Windows.h をインクルードして Sleep 関数を呼び出すプログラムを作ってしまえばよい。

 Windows Script Host を利用する

Windows Script Host の WScript オブジェクトに Sleepメソッド がある。Sleepメソッドを呼び出すスクリプトを用意し、CScriptコマンドで実行する(WScriptコマンドでは終了を待たないので停止させられない)。

単純に(都度スクリプトを書いて、実行、削除)

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 を実行。

 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へ。