Agenda do dia da semana

2

O que posso fazer se quiser agendar uma tarefa, por exemplo, no quinto dia do mês, mas não durante o fim de semana. Exemplo: se o quinto dia for sábado, então a tarefa será agendada na segunda-feira.

Obrigado por respostas.

    
por kubo 23.03.2018 / 13:15

1 resposta

1

Abaixo está uma solução que usei no passado para uma tarefa semelhante que modifiquei um pouco para ajudar potencialmente com sua necessidade. O truque é fazer com que o Agendador de Tarefas execute um script em lote e que o script em lote que é executado tenha a lógica para executar as verificações condicionais ou não.

Você pode usar CALL ou START para executar arquivos executáveis (um aplicativo), outro script em lote, execute scripts do PowerShell e outros tipos de scripts. Às vezes, o agendamento do Agendador de Tarefas não é robusto o suficiente para necessidades especiais de agendamento, como neste caso.

Essentially this solution will. . .

  • Trigger it to run every month on the 5th, 6th, and 7th so if Saturday is the 5th, Sunday is the 6th, then Monday will be the 7th but even if Sunday is the 5th or 6th it'll still run on Monday the 6th or 7th

    enter image description here

  • Incorporate a batch script that will run some initial conditional logic that will check for the day of the week and take action based on these conditions whether or not to create a file with the word Run in it, but if it already has been created with Run for that month then EXIT

Script em lote

Nota: A única coisa que você realmente precisa ajustar é usar o caminho correto na porção SET RunFile=C:\SomeFolder\SomePath\ para torná-la a pasta correta ou o caminho UNC para criar a execução Então, basta fazer o <Rest of logic needed > apenas executar ou executar qualquer lógica ou script que o Agendador de Tarefas esteja executando agora.

@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

Mais recursos

por 23.03.2018 / 18:51