
Пример: у меня есть задача, которая запланирована на 6 утра каждый день (только если я вошел в систему). Если мой компьютер спит/будет в гибернации всю ночь до 9 утра, после пробуждения задача будет запущена, даже если она пропустила свое расписание на 6 утра. Я не хочу, чтобы это произошло, так как важно, чтобы задача была запущенатольков 6 утра.
Я думал, что снятие отметки с параметра "Запустить задачу как можно скорее после пропуска запланированного запуска" предотвратит это, но это не так. Есть ли другая настройка, которую я должен попробовать, чтобы задача запускалась только если компьютер включен в запланированное время (и ждала до следующего запланированного времени, если пропустила его)?
Пример моих настроек:
решение1
Я нашел обходной путь: сделайте так, чтобы ваша задача запускала ваш .bat
скрипт, который запустит команду, если обнаружит, что компьютер не спал. Скрипт, который я использую, это:
@echo off
for /f "delims=" %%t in ('time /t') do if "%%t"=="%1" %~2
Этот скрипт принимает два параметра: первый — время, когда предполагается вызвать команду, а второй — сама команда в кавычках, например script.bat 21:40 "echo x"
.
Объяснение
В отличие от Bash, в Batch невозможно напрямую сохранить вывод команды в переменной, но можноперебирать его вывод строка за строкой. Вот что делает моя вторая строка. Поскольку time /t
вывод
представляет собой одну строку, есть только одна итерация, в которой скрипт запускает команду (переданную как второй параметр), если скрипт был вызван тогда, когда вы хотели, чтобы он был вызван; это условие не будет выполнено, если это отложенное выполнение скрипта.
Я использую %~2
вместо %2
, поскольку %~2
отбрасывает кавычки вокруг команды,
так что передача "echo x"
будет выполняться echo
с аргументом x
, печатая x
,
вместо вызова программы echo x
без аргументов.
Недостатки
Запуск задачи по требованию ничего не даст, лучше снимите флажокРазрешить запуск задачи по требованиювНастройкитабуляция, не путайте с этим,
Изменение часа выполнения задачи требует изменения аргументов, чтобы задача продолжала работать.
time /t
Вывод зависит от региональных настроек.
решение2
Чтобы запустить запланированную задачу, когда компьютер простаивает, поднимите "Ожидание простоя в течение:" и, возможно, галочка "остановить, если компьютер перестает быть бездействующим".
- Щелкните правой кнопкой мыши задачу, которую вы хотите запустить, когда компьютер находится в режиме ожидания, а затем выберите Свойства.
- На вкладке Условия в разделе Время простоя установите флажок Запускать задачу только в том случае, если компьютер бездействовал не менее.
- Введите период времени (в минутах), в течение которого компьютер должен простаивать, прежде чем будет запущена задача.
ПРИМЕЧАНИЕ. Вы также можете указать, что любая задача должна быть остановлена, если компьютер используется, установив флажок Останавливать задачу, если компьютер перестает быть бездействующим.
Чтобы понять время простоя, следуйте этомусвязь...
решение3
Поскольку вы оставляете свой компьютер в спящем режиме/режиме гибернации, то технически вы все еще "в сети" (просто не в сети). Так что в качестве альтернативы вы можете установить задачу "разбудить компьютер для запуска этой задачи" в Условиях, и она всегда будет запускаться в 6 утра. (если только вы не имели в виду, что вам нужно быть у консоли, когда запускается задача)