3

ping やディレクトリなど、時間の遅延を引き起こすいくつかの方法を通り過ぎました。それらのどれも本当に正確ではありませんが、時間を遅らせる適切な方法はありますか?

私の Windows XP や大学の Windows NT ではなく、すべてのコンピューターで動作するわけではありませんが、いくつかのことについて聞いたことがあります。

Google のすべてのファイルを調べて適切な答えを見つけるには何年もかかります。Stack Overflow でまだ質問を見つけられなかったので、自分で質問を作成するのが良いと思いました ;)

4

5 に答える 5

6

寝る

これを行うことができます。

于 2009-04-21T18:39:29.190 に答える
5

<warning>This is a hack</warning>

お気に入りのプログラミング言語 (MS-DOS バッチ以外) を使用して、1 つの引数 (待機するミリ秒数) を受け取るアプリケーションを作成し、バッチ ファイルからこのプログラムを呼び出して、必要な時間だけスリープします。

私の知る限り、これが DOS で信頼できる唯一の方法です。

于 2009-04-21T18:48:33.070 に答える
2

バッチ ファイルと一緒に別のプログラムを送信できない場合は、DEBUGを使用してその場でスリープ コマンドを記述し、それを実行します。

編集:上記の答えは、冗談のようなものでした。DEBUG トリックが含まれているバッチ ファイルは実行しません。バッチ ファイルで遅延を使用する従来の方法は、CHOICEコマンドだと思います。

type nul|choice /c:y /t:y,nn > nul

もちろん、これは XP では機能しません。

于 2009-04-21T18:50:59.397 に答える
0

マシンの速度にもよりますが、数ミリ秒の精度を達成することが可能です。

このようなバッチの作成が完了したばかりです。実際のコードは共有しませんが、いくつかの指針を示します。

  1. %time%変数を使用し、部分文字列( ":"と "。"なし)に分割します。一方の部分文字列は秒を取得し、もう一方は分を取得します(1時間以上の遅延の場合は時間を追加でき、日付を組み込むこともできます)。 )。

  2. set / Aを使用して、時間変数を、丸められた時間(X:00:00.00)から経過した秒数を表す1つの整数に変換します。入力した遅延(秒単位)をそれに追加します。

  3. 短いループを作成し、結合されたvarの値(セクション2で説明)を現在の時刻(このループ内で現在の結合されたmin + sec値を再計算する必要があります)と比較し、一致がtrueの場合にループを終了します。

ここでの1つの主要なバグ修正-「set/A」コマンドで評価されようとしている変数の前のゼロを切り捨てる必要があります。08または09(または単に08または09)が前に付いた整数を使用すると、コンソールのエバリュエーター(このコマンドの場合)がエラーを返すことに気付きました。

備考:これは、コマンド拡張機能が有効になっている場合にのみ機能します。それをテストするには、ルーチンの最初に以下を使用します。

verify other 2>nul
setlocal enableextensions
if errorlevel 1 goto err

次に、「err」という名前のエラーハンドラサブルーチンを追加します。

同じファイルでバッチを続行する場合は、ループサブルーチンの後に「endlocal」を使用します。

ところで、これはWindows XP ServicePack2または3にのみ適用されます。

于 2009-09-28T07:27:46.287 に答える
0

"...適切な方法...."

DOS ではできません。

于 2009-04-21T18:46:18.910 に答える