重複の可能性:
バッチファイルでスリープする方法
バッチファイルで1秒間一時停止するおかしな方法は次のとおりです。
PING 400.500.600.700 > NUL
私はググってみましたが、他にもっと良いものがあるかわかりません。 :)
組み込みの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...
これを行う正しい方法は、Windows 2000で導入された timeout
コマンドを使用することです。
30秒待つには:
timeout /t 30
ユーザーがキーを押すと、タイムアウトが中断されます。ただし、このコマンドはオプションのスイッチ/nobreak
も受け入れます。これにより、明示的なCTRL-C
を除いて、ユーザーが押す可能性のあるものはすべて無視されます。
timeout /t 30 /nobreak
さらに、コマンドのカウントダウンを画面に表示したくない場合は、その出力をNUL
にリダイレクトできます。
timeout /t 30 /nobreak > NUL
@echo off
echo It is time for liftoff.
timeout /t 5
echo Commencing crash sequence.
timeout /t 5
キーを押すと、カウントダウンに乗るだけです。
これがsleep.exeの代わりに使用しているものです。
@ping -n 1 -w 1000 0.0.0.1 > NUL
変化する -n x
(大まかに)x
秒待機します。
タイマー付きのCHOICEコマンドはうまくいきます...
選択肢/ C:x/T:x、10> NUL
WAITやSLEEPなどのように実行できる「プログラム」もあります。
お役に立てれば。
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秒です)。
申し訳ありませんが、長すぎるのですが、ルーチンがどのように機能するかを説明したいと思いました。