web-dev-qa-db-ja.com

バッチファイルでスリープする方法

コマンドと次のコマンドの間のWindowsバッチファイルで実行を一時停止する方法は?

141
Massimo

バッチファイルでスリープする正しい方法は、Windows 2000で導入された timeout コマンドを使用することです。

待機するには 29〜30秒の間

timeout /t 30

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

timeout /t 30 /nobreak

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

timeout /t 30 /nobreak > NUL
209
Massimo

ここでも適用されるので、 別のサイトからの私の回答 をコピーします。

Pingを使用する場合は、もっと良い方法があります。存在しないアドレスに対してpingを実行する必要があるため、ミリ秒の精度でタイムアウトを指定できます。幸いにも、そのようなアドレスは標準(RFC 3330)で定義されており、192.0.2.xです。これは作成されたものではなく、実際には存在しないという唯一の目的を持つアドレスです(明確ではないかもしれませんが、ローカルネットワークでも適用されます)。

192.0.2.0/24-このブロックは、ドキュメントおよびサンプルコードで使用するために「TEST-NET」として割り当てられています。多くの場合、ベンダーおよびプロトコルのドキュメントでは、ドメイン名example.comまたはexample.netと組み合わせて使用​​されます。このブロック内のアドレスは公衆インターネットに表示されるべきではありません。

123ミリ秒間スリープするには、ping 192.0.2.1 -n 1 -w 123 >nulを使用します

16
mafu

Localhostにpingを挿入することもできます。これは完了するまでに4秒かかります(デフォルト)。それは一部の人にとってはkludgeと考えられていますが、まったく同じようにうまく機能します。

コマンド:
ping 127.0.0.1

8
acolyte

免責事項:これは「理想的な」解決策ではないので、ping...

可能であれば、確かにtimeoutを使用してください。しかし、コメントで述べたように、それは常にオプションではありません(たとえば、非インタラクティブモード)。その後、ping "kludge"は非常にシンプルであるため、おそらく次善の策であることに同意します。そうは言っても、別のオプションを提供します...埋め込みVBスクリプト

このソリューションの基礎には、これを超えるあらゆる種類のアプリケーションがあります。多くの場合、VBSはバッチでは実行できないことを実行できます。または、少なくとも非常に簡単に実行できます。ここで説明する手法を使用すると、2つを組み合わせることができます(「シームレス」ではなく、「機能的に」...)。

一時スクリプトを作成し、実行してから削除するための1つのライナーがあります。スクリプトはスリープを行います(この例では3秒間)。

echo WScript.Sleep 3000 > %temp%\sleep.vbs & cscript %temp%\sleep.vbs %sleepMs% //B & del %temp%\sleep.vbs

これは基本的に同じことですが、少し異なって書かれています:

set sleepMs=3000 & set sleepVbs=%temp%\sleep.vbs & echo WScript.Sleep WScript.Arguments(0) > %sleepVbs% & cscript %sleepVbs% %sleepMs% //B & del %sleepVbs%

そして最後に、pingと同様に、CScript自体にもタイムアウトオプションがあります。したがって、スクリプトに無限ループを入力した場合、インタプリタに継続時間を強制させることができます。これは「ビジー」な操作であり、CPUを消費するため、WScript.Sleepプロシージャを使用できる場合はお勧めしませんが、完全を期すために概念的なオプションとして提示します。

set sleepSec=3 & set sleepVbs=%temp%\sleep.vbs & echo While True > %sleepVbs% & echo Wend >> %sleepVbs% & cscript %sleepVbs% //B //T:%sleepSec% & del %sleepVbs%
3
BuvinJ