web-dev-qa-db-ja.com

バットファイルで数秒待つためのより良い方法?

重複の可能性:
バッチファイルでスリープする方法

バッチファイルで1秒間一時停止するおかしな方法は次のとおりです。

PING 400.500.600.700 > NUL

私はググってみましたが、他にもっと良いものがあるかわかりません。 :)

12
Srekel

組み込みのchoiceコマンドの「デフォルトの選択肢」および「タイムアウト」オプションを使用して、遅延を作成できます。

@echo off
echo Hi, I'm doing some stuff
echo OK, now I need to take a breather for 5 seconds...
choice /d y /t 5 > nul
echo Times up! Here I go again...
11
ThatGraemeGuy

これを行う正しい方法は、Windows 2000で導入された timeout コマンドを使用することです。

30秒待つには:

timeout /t 30

ユーザーがキーを押すと、タイムアウトが中断されます。ただし、このコマンドはオプションのスイッチ/nobreakも受け入れます。これにより、明示的なCTRL-Cを除いて、ユーザーが押す可能性のあるものはすべて無視されます。

timeout /t 30 /nobreak

さらに、コマンドのカウントダウンを画面に表示したくない場合は、その出力をNULにリダイレクトできます。

timeout /t 30 /nobreak > NUL
29
Massimo
@echo off
echo It is time for liftoff.
timeout /t 5
echo Commencing crash sequence.
timeout /t 5

キーを押すと、カウントダウンに乗るだけです。

4
Aaron Lewis

これがsleep.exeの代わりに使用しているものです。

@ping -n 1 -w 1000 0.0.0.1 > NUL  

変化する -n x(大まかに)x秒待機します。

3
nray

どうやら Windowsリソースキットには、sleepコマンドが含まれています。その他 Sites また、choice .....の使用をお勧めします.

2
James

タイマー付きのCHOICEコマンドはうまくいきます...

選択肢/ C:x/T:x、10> NUL

WAITやSLEEPなどのように実行できる「プログラム」もあります。

お役に立てれば。

1
KPWINC

Pingの1つ(上記)は適切ですが、ネットワークに接続されている場合にのみ機能します。

遅延するスクリプトの一部を以下に示します。


@エコーオフ

set/a secondsend =%TIME:〜6,2%+ 10

if%secondsend%GTR 59 set/a secondsend = secondsend-60

:ここで待ってて

if%TIME:〜6,2%NEQ%secondsend%goto waithere


これは9〜10秒の間で一時停止します(最初の1秒はTIMEコマンドを使用しているため正確ではなく、開始する前に1秒の半分になる可能性があります)。

'secondsend'をPCクロックの現在の秒に設定することで機能する場合、10を加算します(遅延)。 59より大きい場合は、次の分に折り返されるため、60をオフにします。次に、現在の秒を 'secondsend'でチェックするループがあり、スクリプトに一致すると続行します。

別の期間2-59だけ遅延させたい場合は、2行目の10を変更します(最初の1秒は1秒ではない可能性があるため、2〜59と言います。たとえば、2は1.2秒です)。

申し訳ありませんが、長すぎるのですが、ルーチンがどのように機能するかを説明したいと思いました。

1
Mark H