Encontrei uma solução alternativa: faça sua tarefa iniciar seu script .bat
, que iniciará o comando se descobrir que o computador não estava inativo. O script que eu uso é:
@echo off
for /f "delims=" %%t in ('time /t') do if "%%t"=="%1" %~2
Esse script usa dois parâmetros: o primeiro é o tempo em que o comando deve ser chamado e o segundo é o próprio comando, entre aspas, como script.bat 21:40 "echo x"
.
Explicação
Ao contrário do Bash, no Batch é impossível armazenar diretamente a saída do comando na variável, mas é possível iterar sua linha de saída após a linha . Isso é o que minha segunda linha faz. Porque a saída de time /t
é single line, existe apenas uma iteração, em que o script inicia o comando (passado como segundo parâmetro) se o script foi chamado quando você queria que ele fosse chamado; esta condição não será atendida quando esta for a execução atrasada do script.
Eu uso %~2
em vez de %2
, porque %~2
descarta aspas em torno do comando,
para que passar "echo x"
execute echo
com argumento x
, imprimindo x
,
em vez de invocar o programa echo x
sem argumentos.
Desvantagens
-
Lançar tarefa sob demanda não fará nada, é melhor você desmarcar o campo Permitir que a tarefa seja executada sob demanda na guia Configurações , para não ficar confuso por isso,
-
A modificação da hora de execução da tarefa requer a modificação dos argumentos para manter a tarefa funcionando,
-
A saída de
time /t
depende das configurações regionais.