例:毎日午前6時にスケジュールされているタスクがあります(ログオンしている場合のみ)。コンピューターが午前9時まで一晩中スリープ/休止状態になっている場合、午前6時のスケジュールを逃したとしても、ウェイクアップするとタスクが実行されます。タスクが午前6時にのみ実行されることが重要であるため、これが発生することは望ましくありません。
「スケジュールされた開始を逃した後、できるだけ早くタスクを実行する」設定をオフにすると、これは防止できると思いましたが、そうではありません。コンピューターがスケジュールされた時間にオンになっている場合にのみタスクが実行されるように(そして、コンピューターがスケジュールされた時間に失敗した場合は次のスケジュールされた時間まで待機する)、別の設定を試す必要がありますか?
私の設定の例:
回避策を見つけました。タスクで.bat
スクリプトを起動します。これにより、コンピューターがスリープ状態にないことが検出された場合にコマンドが起動します。私が使用するスクリプトは次のとおりです。
@echo off
for /f "delims=" %%t in ('time /t') do if "%%t"=="%1" %~2
このスクリプトは2つのパラメーターを取ります。1つはコマンドが呼び出される予定の時間であり、2つ目はscript.bat 21:40 "echo x"
のように引用符で囲まれたコマンド自体です。
Bashとは異なり、Batchでは、コマンド出力を変数に直接格納することはできませんが、 出力行を次々と繰り返す 。それが私の2行目です。 time /t
の出力のため
は1行で、反復は1回だけです。スクリプトを呼び出したいときにスクリプトが呼び出された場合、スクリプトはコマンドを起動します(2番目のパラメーターとして渡されます)。これがスクリプトの実行の遅延である場合、この条件は満たされません。
%~2
はコマンドの前後の引用符を破棄するため、%2
の代わりに%~2
を使用します。"echo x"
を渡すと引数echo
でx
が実行され、x
が出力されます。
引数なしでプログラムecho x
を呼び出す代わりに。
タスクをオンデマンドで起動しても何も起こりません。設定タブのフィールドタスクをオンデマンドで実行できるようにするのチェックを外したほうがよいでしょう。それと混同しないでください、
タスクの実行時間を変更するには、タスクを機能させ続けるために引数を変更する必要があります。
time /t
の出力は、地域の設定によって異なります。コンピュータがアイドル状態のときにスケジュールされたタスクを実行するには、「Wait for Idle for:」を上げ、「」にチェックマークを付けます。コンピュータがアイドル状態でなくなったら停止します」。
注:[コンピューターがアイドル状態でなくなったらタスクを停止する]チェックボックスをオンにして、コンピューターが使用中の場合にタスクを停止するように指定することもできます。
アイドル時間を理解するには、これに従ってください リンク...