Qual é a linha de comando para agendar uma tarefa para ser executada uma vez e em breve?

6

Eu sei que existe o em e schtasks . Mas não consegui descobrir como usá-los para executar uma tarefa em breve e uma vez. Eu li sobre um breve comando, mas não há tal comando na minha versão do Windows .

Eu pretendo incluir este comando em um arquivo de lote e, por causa disso, não consigo codificar a hora de início.

    
por Jader Dias 08.02.2011 / 22:09

5 respostas

5

O comando schtasks pode executar uma tarefa definida imediatamente.

De Como usar Schtasks.exe para agendar tarefas no Windows Server 2003

Schtasks /Run

Starts a scheduled task immediately. The run operation ignores the schedule, but uses the program file location, user account, and password that are saved in the task to run the task immediately.

Syntax:

schtasks /run /tn TaskName [/s computer [/u [domain\]user /p password]] /?

Portanto, basta definir a tarefa e executá-la imediatamente a qualquer momento que você precisar.

    
por 13.02.2011 / 09:09
7

Trabalhando na parte superior de A resposta de Keith para atender às suas necessidades:

timeout /t X ; psexec -i -s Y

Onde

  1. timeout substitui o sono no Windows 7.
  2. X são os segundos a aguardar definidos por /t , adicione /nobreak se você quiser impedir que o usuário continue.
  3. psexec da Microsoft SysInternals permite que você execute interativos ( -i ) como o sistema local ( -s ), por favor, note que você tem que iniciar o psexec uma vez para aceitar o primeiro EULA ou adicionar -accepteula .
  4. Y é seu comando.

runas não permite que você inicie como um sistema local. Por isso, use PsTools para tarefas relacionadas ao processo.
Iniciar uma tarefa ou serviço agendado parece ser uma grande solução para mim ...

Por exemplo, A resposta de Patrick pode ser simplesmente reescrita como:

timeout /t 120 ; psexec -i -s calc.exe
    
por 13.02.2011 / 22:20
3

Isso inicia o calc.exe em 2 minutos. Mude o

set /A START_MIN=%%j + 2

linha para alterar o intervalo de tempo.

for /f "delims=:. tokens=1,2" %%i in ("%time%") do (
set /A START_HOUR=%%i
set /A START_MIN=%%j + 2
)

IF %START_MIN% GEQ 60 (
call :AdjustStartTime
)

IF %START_MIN% LSS 10 SET START_MIN=0%START_MIN%

SCHTASKS /Create /SC ONCE /TN "My Scheduled Task Name" /RU "" /TR "C:\Windows\System32\Calc.exe" /ST %START_HOUR%:%START_MIN%

:AdjustStartTime
SET /A START_HOUR=%START_HOUR% + 1
SET /A START_MIN=%START_MIN% - 60
GOTO:EOF
    
por 12.02.2011 / 23:52
1

Se você não quiser usar at , uma maneira rápida é apenas dormir antes do seu programa principal.

sleep 10 ; mycommand

Ou coloque isso em um script.

    
por 08.02.2011 / 23:12
0

A resposta de Patrick S. atendeu às minhas necessidades.

Gostaria de mencionar, no entanto, que as aspas não precisam estar lá seguindo o /TR e, por qualquer motivo, pareciam quebrar meu script.

Após a remoção, o script dele funcionou muito bem!

Meu uso estava em uma regra do Outlook. Um script é chamado e um email é gravado na unidade com um plug-in (mensagem salva). Isso é para postar em um site do meu PC do escritório para um site e meu script original que chama o lote precisa terminar antes de um arquivo ser gravado. Tive dificuldade em descobrir como atrasar adequadamente a tarefa agendada, mesmo depois de acessar a página do TechNet "schtasks".

    
por 11.12.2012 / 02:55