コマンドと次のコマンドの間のWindowsバッチファイルで実行を一時停止する方法
コマンドと次のコマンドの間のWindowsバッチファイルで実行を一時停止する方法
回答:
バッチファイルでスリープする正しい方法はtimeout
、Windows 2000で導入されたコマンドを使用することです。
29〜30秒の間に待機するには:
timeout /t 30
ユーザーがいずれかのキーを押すと、タイムアウトが中断されます。ただし、このコマンドはオプションのswitchも受け入れます/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
Ping
単に仕事にとって間違ったツールです。
localhostにpingを挿入することもできます。これは完了するまでに4秒かかります(デフォルト)。それは一部の人にとっては汚点と考えられていますが、まったく同じようにうまく機能します。
コマンド:
ping 127.0.0.1
ping
は、OSが付属しているかどうかを心配する必要があります。'95 '98またはMEについて十分に心配している場合は、6.22についても同様に心配する必要があります。ping
どちらもありません
免責事項:これは「理想的な」解決策ではありませんので、推奨する人たちに行われているようなことで頭を痛めつけないでくださいping
...
可能であれば、timeout
必ず使用してください。しかし、コメントで述べたように、それは常にオプションではありません(たとえば、非インタラクティブモード)。その後、ping
非常に単純なので、「クラッジ」はおそらく次善の選択肢であることに同意します。とはいえ、別のオプションを提供しています... VB Scriptを埋め込みます。
このソリューションの基礎には、これ以外にもあらゆる種類のアプリケーションがあります。多くの場合、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%