Run a task once a day at log on
I am trying to set up a schedule task to run an exe exactly once a day.
I am considering writing a batch script that will write out to a file and be able to detect if it's been called before.
Ok, o seguinte é um exemplo com uma lógica de script em lote muito básica e simples, como você afirmou no comentário, pode ser útil no seu caso por problemas que você está enfrentando.
Também vou referenciar outro post (no final desta resposta) no Agendador de Tarefas com o método getcha, etc. para o caso de problemas com o Agendador de Tarefas não funcionarem como esperado ao executar o script em lote. Mesmo que as opções escolhidas especificamente na configuração possam ser diferentes, assim como o sistema operacional, as pegadinhas nesse nível provavelmente são as mesmas, então dê uma olhada rápida nesse post também se você tiver problemas com o agendamento em lote com o Agendador de Tarefas não funcionando como esperado.
Divisão básica de script
-
O loop
FOR /F
cria a variávelYYYYMMDD
a ser usada na data atual. -
O
CheckDir
é um caminho de unidade local ou até mesmo um caminho UNC de\servername\sharename\folder
que você colocará esse pequeno arquivo de verificação com a parteYYYYMMDD
de seu nome de arquivo a cada dia.- Basta alterar o
C:\Path
ou conectar o caminho UNC para onde isso precisa apontar no seu ambiente
- Basta alterar o
-
O
checkfile
é APENAS o nome do arquivo com o%CheckDir%\
na frente dele e o%DT%
anexado ao final dele antes da extensão .txt. Por exemplo, você obterá um resultado final deC:\Path\VersionBackup_20130202.txt
para hoje, como no meu exemplo.- Isso essencialmente verificará se o arquivo existe para hoje, se assim for, termine o script, se ele não existir, crie-o e execute o VersionBackup.exe de qualquer nome do EXE. Dessa forma, isso poderia ser agendado com o Agendador de Tarefas para uma vez por hora apontando para o script em lote e pela lógica do script em lote, ele só poderá ser executado uma vez por dia.
-
O
START "" "C:\Path\VersionBackup.exe"
precisa apontar para o caminho completo onde existe o nome do EXE que executa a operação de backup de versão.
Exemplo de script em lote
@ECHO ON
:::: SET YYYYMMDD format for date
FOR /F "TOKENS=2-4 DELIMS=/ " %%A IN ("%DATE%") DO SET "DT=%%C%%B%%A"
:SetCheckFile
SET CheckDir=C:\Path
SET checkfile=%CheckDir%\VersionBackup_%DT%.txt
IF NOT EXIST "%CheckDir%" MD "%CheckDir%"
IF EXIST "%checkfile%" GOTO EOF
ECHO Creating the check file for date %DT% to ensure only one Version Backup run for the day>>"%checkfile%"
:StartApp
START "" "C:\Path\VersionBackup.exe"
GOTO EOF