trash-area.com ≫ blog ≫ プログラミングDOSWindowsXP標準機能だけでスリープ(コマンド)の実装

2009年01月08日 4

unix とかにある sleep コマンドです。
なんで windowsはついてないんでしょうね。

VCがあるならコレだけで済むところをどうにかしようというわけです。

int main(int argc, char* argv[])
{
	long wait = atol(argv[1]) * 1000;
	Sleep( wait );
	return 0;
}

DOSコマンドのみでやるとこんな感じ。
sleep.bat としてパスが通ったトコに配置して下さい。

@echo off
for /l %%i in (1,1,%1) do @ping localhost -n 2 > nul

あとはコマンドラインなりなんなりから sleep 10 とやれば10秒sleepしてくれます。

ぶっちゃけ 3秒(くらい)スリープさせたいだけならわざわざバッチファイルなんて作らなくても
ping localhost -n 2 > nul
ping localhost -n 2 > nul
ping localhost -n 2 > nul
と3行書けばいいだけなのでこれが一番好きです。

WSH(VBS)ならこんな感じ。
sleep.vbs として以下略。

call WScript.Sleep(WScript.Arguments(0)*1000)

ただ、これの場合は cscript.exe で叩かないといけないのでちとめんどいです。
もしくは start /wait sleep 10 とか。
ただこっちのがスリープする時間は正確だと思います。

DOS+WSH(JScript)版。
sleep.bat として保存します。(sleep.js ではありません)

@set @temp=0/*
@echo off
cscript.exe //e:jscript //nologo "%~f0" %1
goto :eof
*/
WScript.Sleep(WScript.Arguments(0)*1000);

先ほどの wscript.exe で動かされるとスリープしてくれないのを解決します。
バッチファイルからテンポラリファイル作って~っていうのがいやなのでこんな感じに。
JScriptの条件コンパイルの構文を利用してDOSコマンド部分をコメントアウトしています。
で、バッチファイルの中で cscript で起動しなおしてあげています。

ソーシャルブックマーク
はてな Livedoor del.icio.us
関連してそうな記事
同じカテゴリーの別の記事
タグ
, , ,
トラックバックURL
  1. URIN HACK より:

    コマンドプロンプトでスリープする真っ当な方法…

    ネット上を探すとpingやVBScriptを使うという情報が多かったのですが、Vista以降であればコマンドプロンプトで正式に対応されています。…

コメント
4 Comments
  1. ほげ

    2010.03.16 @ 12:43 AM

    echo 3秒待つ。
    call :sleep 3
    exit

    :sleep
    for /l %%i in (1,1,%1) do @ping localhost -n 2 > nul
    exit /b

  2. 通りすがり

    2010.03.19 @ 7:23 PM

    ping localhost -n %1 > nul
    だけで良いのではないでしょうか?

    http://kgo.dtiblog.com/blog-entry-23.html

  3. admin

    2010.04.20 @ 12:03 AM

    みなさま情報ありがとうございます。

    > ほげさん
    > 通りすがり さん

    まさしくそのとおりですね 笑
    ping /? もしなかった自分がお恥ずかしいです。

    ぜんぜん関係無いのですが、batファイルの for文っていつまでたっても慣れないです。

Comment RSS

コメントをどうぞ

*反映されるまでに時間がかかることがあります。
*メールアドレスはアバターの使用に使います。