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 /tdepende das configurações regionais.