
例: 毎日午前 6 時にスケジュールされているタスクがあります (ログオンしている場合のみ)。コンピューターが夜中 9 時までスリープ状態または休止状態になると、起動時にタスクは午前 6 時のスケジュールを逃しても実行されます。タスクが実行されることは重要なので、このような状況は避けたいです。のみ午前6時。
「スケジュールされた開始に失敗した後にできるだけ早くタスクを実行する」設定のチェックを外すと、この問題を回避できると思いましたが、そうはなりません。スケジュールされた時間にコンピューターがオンになっている場合にのみタスクが実行されるようにする (そして、失敗した場合は次のスケジュールされた時間まで待機する) ようにする別の設定を試す必要があるでしょうか?
私の設定の例:
答え1
回避策を見つけました。タスクに.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ではコマンド出力を変数に直接保存することはできませんが、出力行を1行ずつ繰り返し処理するこれが 2 行目の処理です。time /t
の出力は
1 行なので、反復処理は 1 回だけであり、スクリプトが呼び出されるタイミングが適切であれば、スクリプトはコマンド (2 番目のパラメータとして渡される) を起動します。スクリプトの実行が遅延される場合、この条件は満たされません。
%~2
の代わりにを使用します。これは、 がコマンドを囲む引用符を削除する%2
ため、 を渡すと、引数なしで プログラムを呼び出すのではなく、が引数付きで実行され、 が印刷されるからです。%~2
"echo x"
echo
x
x
echo x
欠点
オンデマンドでタスクを起動しても何も起こりません。フィールドのチェックを外したほうがよいでしょう。タスクをオンデマンドで実行できるようにするの中に設定タブ、それに惑わされないでください、
タスクの実行時間を変更するには、タスクが動作し続けるように引数を変更する必要があります。
time /t
の出力は地域設定によって異なります。
答え2
コンピュータがアイドル状態のときにスケジュールされたタスクを実行するには、「アイドル状態を待機する時間:「そしておそらくチェックマーク」コンピュータがアイドル状態でなくなったら停止する「」。
- コンピューターがアイドル状態のときに実行するタスクを右クリックし、[プロパティ] をクリックします。
- [条件] タブの [アイドル時間] で、[コンピューターがアイドル状態になっている時間が最低でも経過した場合にのみタスクを開始する] チェック ボックスをオンにします。
- タスクを実行する前にコンピューターがアイドル状態になっている必要がある時間の長さ (分単位) を入力します。
注: [コンピューターがアイドル状態でなくなった場合にタスクを停止する] チェック ボックスをオンにすると、コンピューターが使用中の場合、タスクを停止するように指定することもできます。
アイドルタイムを理解するには、これに従ってくださいリンク...
答え3
コンピューターをスリープ/休止状態にしておくと、技術的にはまだ「ログオン」状態になります (離れているだけです)。そのため、代わりに、条件で「このタスクを実行するためにコンピューターを起動する」ようにタスクを設定すると、常に午前 6 時に実行されます。(タスクの実行時にコンソールの前にいる必要がある場合を除いて)