Agendar um trabalho na linha de comando do Windows?

15

No Linux, há cron job e no job. Existe uma maneira de agendar um trabalho na linha de comando no Windows?

A GUI do Agendador de tarefas não é o que estou procurando. Preciso modificar um script para agendar um evento sob uma determinada condição ... portanto, deve haver uma maneira de chamar isso na linha de comando.

fixer1234
fonte

Respostas:

13

O Windows também possui um "trabalho". Embora a sintaxe seja um pouco diferente.

C: \ Documents and Settings \ Administrador> em /?
O comando AT agenda comandos e programas para execução em um computador em
uma hora e data especificadas. O serviço de agendamento deve estar em execução para usar
o comando AT.

AT [\\ nomedocomputador] [[id] [/ DELETE] | / EXCLUIR [/ SIM]]
À hora [\\ nomedocomputador] [/ INTERACTIVE]
    [/ TODOS: data [, ...] | / NEXT: date [, ...]] "command"

\\ nome_do_computador Especifica um computador remoto. Os comandos estão agendados no
                   computador local se este parâmetro for omitido.
id É um número de identificação atribuído a um programado
                   comando.
/ delete Cancela um comando agendado. Se id for omitido, todos os
                   comandos agendados no computador são cancelados.
/ yes Usado com o comando cancelar todas as tarefas quando não houver mais
                   confirmação é desejada.
hora Especifica a hora em que o comando deve ser executado.
/ interativo Permite que o trabalho interaja com a área de trabalho do usuário
                   quem está conectado no momento em que o trabalho é executado.
/ every: date [, ...] Executa o comando em cada dia especificado da semana ou
                   mês. Se a data for omitida, o dia atual do mês
                   é assumido.
/ next: date [, ...] Executa o comando especificado na próxima ocorrência do
                   dia (por exemplo, na próxima quinta-feira). Se a data for omitida, o
                   o dia atual do mês é assumido.
"command" É o comando do Windows NT ou o programa em lotes a ser executado.

Exemplo:

at 9:00 /interactive notepad.exe

Isso fará com que o Bloco de notas seja aberto interativamente para o usuário às 9:00 da manhã.

John T
fonte
3
"at" está obsoleto enquanto falamos. "schtasks" é o caminho a percorrer agora. Talvez você possa alterar a resposta correta.
Marius
15

Use o comando schtasks . Possui mais opções do que o atcomando e algumas opções agradáveis, como /mo LASTDAYno último dia do mês:

O schtasks agenda comandos e programas para serem executados periodicamente ou em um horário específico. Adiciona e remove tarefas da agenda, inicia e interrompe tarefas sob demanda e exibe e altera as tarefas agendadas.

Sintaxe:

schtasks / create / tn TaskName / tr TaskRun / sc schedule [/ mo modifier]
         [/ d dia] [/ m mês [, mês ...] [/ i IdleTime] [/ st StartTime] 
         [/ sD StartDate] [/ ed EndDate] [/ s computador [/ u 
         [domínio \] usuário / senha p]] 
         [/ ru {[Domínio \] Usuário | "Sistema"} [/ rp Senha]] /?
splattne
fonte
1

Escreva um script de shell do Windows para fazer isso usando um programa de suspensão por atraso:

@echo off

:loop
someprogram args
sleep 900
if somecondition goto loop

Execute-o em uma janela de shell própria. Configure o cmd.exe para executar na inicialização com este script. sleepdorme por alguns segundos:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Windows.h>

int main(int argc, char* argv[])
{
    int n = atoi(argv[1]);

    Sleep(n * 1000);

    return 0;
}
Henrik
fonte