コマンドと次のコマンドの間のWindowsバッチファイルで実行を一時停止する方法は?
バッチファイルでスリープする正しい方法は、Windows 2000で導入された timeout
コマンドを使用することです。
待機するには 29〜30秒の間 :
timeout /t 30
ユーザーがキーを押すと、タイムアウトが中断されます。ただし、このコマンドはオプションのスイッチ/nobreak
も受け入れます。これにより、明示的なCTRL-C
を除いて、ユーザーが押す可能性のあるものはすべて無視されます。
timeout /t 30 /nobreak
さらに、コマンドのカウントダウンを画面に表示したくない場合は、その出力をNUL
にリダイレクトできます。
timeout /t 30 /nobreak > NUL
ここでも適用されるので、 別のサイトからの私の回答 をコピーします。
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
を使用します
Localhostにpingを挿入することもできます。これは完了するまでに4秒かかります(デフォルト)。それは一部の人にとってはkludgeと考えられていますが、まったく同じようにうまく機能します。
コマンド:
ping 127.0.0.1
免責事項:これは「理想的な」解決策ではないので、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%