Executar um arquivo em lotes com o planejador de tarefas do Windows

155

Eu tenho um arquivo em lotes daily.bat, este é o código:

cd C:\inetpub\wwwroot\infoweb\factuur\cron
c:\PHP\php.exe -f ./cron_pdf.php
ftp -s:ftp_upload.txt ftp.site.be

E criei uma tarefa com o agendador de tarefas no Windows 7. Quando executo o lote manualmente, tudo corre bem, mas quando tento executá-lo com o agendador de tarefas, nada acontece.

Minha ação é

'run script' "C:\inetpub\wwwroot\site\x\cron\daily.bat"

O UAC está desativado e eu sou Admin.

Alguma idéia de por que isso não está funcionando?

Ruben
fonte
Não tenho certeza se esta pergunta é offtopic, mas você pode obter melhores respostas no serverfault.com .
Hans Olsson
Obrigado, eu também vou tentar publicá-lo em serverfault
Ruben
isso pode ser útil também: serverfault.com/questions/734035/...
Ruben

Respostas:

286

Eu enfrentei o mesmo problema, mas encontrei outra solução sem precisar modificar meu script em lote.

A única coisa que eu perdi foi nas configurações de 'Ação' - opção "Iniciar em (opcional)".

Vá nas propriedades da tarefa -> guia Ação -> Editar -> Preencha como abaixo:

  1. Ação : iniciar um programa
  2. Programa / script : caminho para o script em lote, por exemploC:\Users\beruk\bodo.bat
  3. Adicione argumentos (opcional) : <se necessário - dependendo do seu script>
  4. Iniciar em (opcional) : coloque o caminho completo para o local do script em lote, por exemplo C:\Users\beruk\(não coloque aspas em Iniciar)

Então clique em OK

Funciona para mim. Boa sorte!

Ghazi
fonte
8
Estou ciente de que a postagem original é bastante antiga. Mas este post estava entre o link principal na pesquisa do google quando eu estava tentando a resposta para esse problema. Então, acho que gostaria de compartilhar as descobertas. Apenas no caso, alguém incluindo eu está esquecendo isso.
Ghazi
4
Não acredito que você realmente precise do valor 'Iniciar em (opcional)' - sou capaz de executar um arquivo .bat simples e independente sem ele. Obrigado pelas etapas claras - muito útil para quem procura uma simples caminhada!
DCaugs
23
@DCaugs, Sem o Start Inconjunto de parâmetros, meu arquivo em lotes agendado não seria executado. (Windows 7)
Justin Skiles
2
Esta solução não funcionou para mim. A resposta fornecida por @Arun Raja funcionou bem.
precisa
7
@DCaugs Esta Start iné a principal razão pela qual funcionou para mim.
30516 Gustavo
54

Nenhum dos métodos acima funcionou. Eu tentei dessa maneira, como disse em um tutorial e funcionou.

Açao:

Start a program 

Programa / script:

cmd

Adicione argumentos:

/c start "" "E:\Django-1.4.1\setup.bat"

Trabalhou para mim no Win7 Pro. Você deve ter uma conta com uma senha (senhas em branco não são boas)

Arun Raja
fonte
1
Eu concordo! nenhuma das soluções anteriores funcionou para mim em um Windows Server 2008. Essa resposta fez o truque para mim! Obrigado.
Cagy79
Eu gostaria de poder lhe dar um +2000. Eu tenho tentado diferentes abordagens durante todo o dia e nada funcionou bem, exceto a sua solução. Eu tive que iniciar um arquivo em lotes que, por sua vez, lança outro arquivo em lotes 10 vezes com parâmetros diferentes. No console, tudo funcionou bem, mas o Agendador de tarefas se recusou a abrir mais de 4 processos ao mesmo tempo. Foi estranho ... Com sua técnica, todos os 10 processos foram lançados.
Icarus
Este método funcionou para mim. Mas, no planejador, na guia Histórico, a tarefa é concluída imediatamente com êxito, pois a tarefa é o cmd, mas não o arquivo .bat que ela inicia. Como o arquivo bat, uma operação de backup, termina em 2-3 horas, não faço ideia do seu status.
Azzurroverde 10/11/2015
Você precisa manter uma notificação por e-mail no final da conclusão do arquivo bat para notificar seu status. essa é uma maneira.
Arun Raja
Isso funcionou, em conjunto com a dica de que ele deve ser configurado para ser executado em um diretório especificado, conforme mencionado na resposta aceita do @ Ghazi, certificando-se de que "executar com os privilégios mais altos" também esteja selecionado.
Mheavers
43

Para aqueles cujos arquivos bat ainda não estão funcionando no Agendador de tarefas do Windows 8+, uma coisa que eu gostaria de acrescentar à resposta de Ghazi - depois de muito sofrimento:

1) Em Ações, escolha "Criar tarefa BASIC ", não "Criar tarefa"

Fiz isso por mim, além dos outros problemas a não esquecer:

  1. Use o caminho Iniciar em para seu arquivo em lotes, mesmo que seja opcional
  2. use aspas, se necessário, em sua entrada Iniciar um programa> programa / script, ou seja, "C: \ meus scripts \ runme.bat" ...
  3. MAS NÃO use aspas no campo Iniciar em. (Louco, mas é verdade!)

Isso funcionou sem a necessidade de acionar um prompt de comando.

(Desculpe, meu representante é muito baixo para adicionar minha dica de tarefa básica aos comentários de Ghazi)

micstr
fonte
21

Verifique se "Iniciar" não tem aspas.

Jonathan
fonte
7

Está funcionando agora. Foi o que eu fiz. Você provavelmente não precisará de todas essas etapas para fazê-lo funcionar, mas apenas para ter certeza de experimentar todas elas:

  • Verifique os parâmetros da conta da sua tarefa agendada e verifique se eles estão configurados para execução, independentemente de alguém estar ou não conectado à máquina

  • verifique executar com a maioria dos privilégios / direitos

  • Certifique-se de ir para o caminho completo primeiro: cd C: \ inetpub \ wwwroot \ infoweb \ factuur \ cron

  • Não use aspas duplas nos arquivos em lote (não sei por que, mas parece ajudar)

  • Seja superadministrador, digite 'Net user administrator / active: yes' no prompt de comando, efetue logout e logon como superadministrador, para que o UAC esteja desativado

Ruben
fonte
2
Lamento dizer, mas esta é uma resposta muito mal escrita. Eu garantiria que a resposta correta fosse selecionada como a resposta aceita.
jwize
5

Certifique-se de que "Start In" NÃO termine com uma barra invertida.

Michael Kehoe
fonte
1
Você poderia esclarecer a que versão do sistema operacional ou tipo de tarefa ou a que informações são aplicáveis? A resposta aceita inclui a \ portanto deve funcionar em alguns sistemas - onde não funciona?
você está
Isso corrigiu uma tarefa agendada 'foo.cmd' para mim no Windows Server 2012. Com 'Iniciar em' definido como 'C: \ Foo \', a tarefa falhou com o erro de código de saída 0x8007001, mas com 'Iniciar em' definido como 'C : \ Foo 'a tarefa correu bem.
Aaron
5

Tive um problema em que minha tarefa não estava sendo disparada simplesmente porque estava sendo executada em um laptop sem cabo de alimentação ... Na guia condições, por padrão, é verificado para que uma tarefa não seja executada enquanto a energia CA não estiver conectada.

Chriz
fonte
3

No Windows7 Pro, descobri que a solução da Arun funcionava para mim: eu conseguia que isso funcionasse mesmo com "nenhum usuário conectado"; optei por usar privilégios mais altos.

De experiência anterior, você deve ter uma conta com uma senha (senhas em branco não são boas) e, se o programa não solicitar a senha quando você concluir o assistente, volte e edite alguma coisa até que isso aconteça!

Este é o método caso não esteja claro o que funcionou

Action: start a program
Program/script : cmd
      (doesn't need the .exe bit!)
Add arguments:
    /c start "" "E:\Django-1.4.1\setup.bat" 
Bruce Metelerkamp
fonte
3

Eu brinquei com isso por várias horas e tentei muitas sugestões diferentes.

Finalmente consegui fazer o seguinte:

Ação: iniciar um programa

Programa / Script: C: \ scriptdir \ script.bat

Adicionar argumentos (opcional) script.bat

Iniciar em (opcional): c: \ scriptdir

executar somente quando o usuário estiver conectado

executar com privilégios mais altos

configurar para: Windows Vista, Windows Server 2008

Robb
fonte
2

Se todo o resto falhar para você aqui, verifique se o usuário que você está tentando executar a tarefa tem acesso ao arquivo que está tentando usar.

No meu caso, eu estava tentando executar um arquivo em lotes de C: \ Users \ Administrator \ Desktop que a conta não pôde acessar. Mover para um local neutro em C: \ resolveu o problema.

Vince
fonte
1

Verifique qual conta de usuário você usa para executar nossa tarefa. Pode acontecer que você execute sua tarefa com um usuário diferente do usuário padrão e esse usuário exija alguns privilégios adicionais. Também pode acontecer que a tarefa seja executada, mas você não pode ver nenhum efeito, porque o arquivo em lote aguarda alguma resposta do usuário, portanto, verifique o gerenciador de tarefas se o processo estiver em execução. Depois que eu agendar um lote com svn update de alguma página da web, o processo trava porque o svn pediu para aceitar o certificado do servidor.

user6039542
fonte
1
  1. Não use aspas duplas no seu arquivo cmd / lote
  2. Certifique-se de ir para o início completo do caminho em (opcional) :
    C: \ Necessary_file \ Reqular_task \ QDE \ cmd_practice \

insira a descrição da imagem aqui

Shahidul Islam Molla
fonte
1

Eu posto a resposta a esta pergunta aqui e aqui .

insira a descrição da imagem aqui

ToCarbajal
fonte
Desde que você tenha certeza de que a outra resposta está correta, você pode sinalizar a pergunta como duplicada.
Badro Niaimi 27/11/19
0

O uso do botão Executar na janela principal do Agendador de tarefas para testar várias variações finalmente encontrou as configurações corretas. Essas duas opções devem ser combinadas: -Executar somente quando o usuário estiver conectado -Executar com privilégios mais altos. Todas as outras variações falharam. É irritante o tempo todo desperdiçado com isso, mas pelo menos funciona. SO: VERSÃO WINDOWS 8 CORE (BASIC)

sapitron
fonte
0

Tente executar a tarefa com altos privilégios.

coloque um \ no final do caminho em "iniciar na pasta" como c: \ temp \

Não sei por que, mas às vezes isso funciona para mim.

C Jee
fonte
0

Açao: Start a Program

Programa / script: C:\Windows\System32\cmd.exe

Adicione argumentos: /k start "" "E:\scripts\example.bat"

Adicione exitao final do seu arquivo em lotes.

A janela cmd não será exibida se você selecionar Run whether user is logged in or not. Você precisa selecionar Run only when user is logged onpara ver a janela em ação.

Ethan Allen
fonte