2

Что я могу сделать, если я хочу запланировать задание, например, на пятый день в месяце, но не в выходные дни. Пример: если пятый день суббота, значит, задание будет запланировано на понедельник.

Спасибо за ответы.

1 ответ1

1

Ниже приведено решение, которое я использовал в прошлом для аналогичной задачи, которую я немного изменил, чтобы потенциально помочь вам. Хитрость заключается в том, чтобы планировщик задач выполнял пакетный сценарий, а выполняемый пакетный сценарий содержал логику для выполнения условных проверок для запуска или нет.

Вы можете использовать CALL или START для запуска исполняемых файлов (приложения), другого пакетного сценария, выполнения сценариев PowerShell и других типов сценариев. Иногда планирование планировщика заданий недостаточно надежно для особых задач планирования, как в этом случае.

По сути это решение будет. , ,

  • Запускайте его для запуска каждый месяц 5- 5th , 6th и 7th так что если суббота 5th , воскресенье 6th , то понедельник будет 7th но даже если 5th или 6th воскресенье, он все равно будет работать в понедельник 6th или 7th

  • Включите пакетный скрипт, который будет запускать некоторую начальную условную логику, которая проверит день недели и применит действие на основе этих условий, создавать ли файл со словом « Run , но если он уже был создан с помощью « Run за этот месяц, затем EXIT

Пакетный скрипт

Примечание: единственное, что вам действительно нужно отрегулировать, это использовать правильный путь в части SET RunFile=C:\SomeFolder\SomePath\ чтобы сделать его правильной папкой или UNC-путь для создания файла запуска и т.д.Затем просто заставьте <Rest of logic needed > просто выполнить или запустить любую логику или скрипт, который сейчас запускает планировщик задач .

@ECHO ON

::: -- Set date variables for conditional logic for the current date and day of week
FOR /F "TOKENS=1 DELIMS=." %%A IN ('WMIC OS GET LocalDateTime ^| FIND "."') DO SET rundt=%%~A
SET rundt=%rundt:~0,6%
FOR /F "TOKENS=1 DELIMS=." %%A IN ('WMIC PATH Win32_LocalTime GET DayOfWeek ^| FINDSTR /R [0-9]') DO SET DOW=%%~A

::: -- If the day today is 6 for Saturday or 7 for Sunday then EXIT
IF %DOW%==6 EXIT
IF %DOW%==7 EXIT

::: -- Set the run file location to create a file with "run" in it if the day is correct
SET RunFile=C:\SomeFolder\SomePath\%rundt%.run

::: -- If "Run" already found in "~\<YYYYMM>.run" file then do not run because it already has this month
FINDSTR /I Run "%RunFile%"
IF ERRORLEVEL 1 (GOTO :Run) ELSE (EXIT)

:Run
ECHO Run>"%RunFile%"
<Rest of logic needed    >
<CALL C:\folder\app.exe  >

EXIT

Дополнительные ресурсы

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .