Programar um trabalho a partir da linha de comando do Windows?

13

No Linux há trabalho cron e at job. Existe uma maneira de agendar um trabalho a partir da linha de comando no Windows?

O Agendador de Tarefas não é a minha GUI. Eu preciso modificar um script para agendar um evento em uma determinada condição ... então deve haver uma maneira de chamar isso da linha de comando.

    
por fixer1234 19.07.2009 / 08:15

3 respostas

12

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

C:\Documents and Settings\Administrator>at /?
The AT command schedules commands and programs to run on a computer at
a specified time and date. The Schedule service must be running to use
the AT command.

AT [\computername] [ [id] [/DELETE] | /DELETE [/YES]]
AT [\computername] time [/INTERACTIVE]
    [ /EVERY:date[,...] | /NEXT:date[,...]] "command"

\computername     Specifies a remote computer. Commands are scheduled on the
                   local computer if this parameter is omitted.
id                 Is an identification number assigned to a scheduled
                   command.
/delete            Cancels a scheduled command. If id is omitted, all the
                   scheduled commands on the computer are canceled.
/yes               Used with cancel all jobs command when no further
                   confirmation is desired.
time               Specifies the time when command is to run.
/interactive       Allows the job to interact with the desktop of the user
                   who is logged on at the time the job runs.
/every:date[,...]  Runs the command on each specified day(s) of the week or
                   month. If date is omitted, the current day of the month
                   is assumed.
/next:date[,...]   Runs the specified command on the next occurrence of the
                   day (for example, next Thursday).  If date is omitted, the
                   current day of the month is assumed.
"command"          Is the Windows NT command, or batch program to be run.

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ã.

    
por 19.07.2009 / 08:17
14

Use os schtasks comando. Ele tem mais opções do que o comando at e algumas opções legais como /mo LASTDAY para o último dia do mês:

schtasks schedules commands and programs to run periodically or at a specific time. Adds and removes tasks from the schedule, starts and stops tasks on demand, and displays and changes scheduled tasks.

Sintaxe:

schtasks /create /tn TaskName /tr TaskRun /sc schedule [/mo modifier]
         [/d day] [/m month[,month...] [/i IdleTime] [/st StartTime] 
         [/sd StartDate] [/ed EndDate] [/s computer [/u 
         [domain\]user /p password]] 
         [/ru {[Domain\]User | "System"} [/rp Password]] /? 
    
por 19.07.2009 / 08:42
1

Escreva um script de shell do Windows para fazer isso usando um programa para adiar o 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 ser executado ao iniciar este script. sleep dorme 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;
}
    
por 18.06.2015 / 14:23