Eu tenho uma tarefa agendada que inicia um script em lote que é executado a robocopy
cada hora. Toda vez que ele é executado, uma janela aparece na área de trabalho com a saída do robocopy, que eu realmente não quero ver.
Consegui fazer a janela parecer minimizada fazendo o trabalho agendado ser executado
cmd /c start /min mybat.bat
mas isso me dá uma nova janela de comando a cada hora. Fiquei surpreso com isso, dado cmd /c
"Executa o comando especificado por string e depois termina" - devo ter entendido mal os documentos.
Existe uma maneira de executar um script em lote sem que apareça uma janela cmd?
Você pode executá-lo silenciosamente usando um arquivo de script do Windows. O método Run permite que você execute um script no modo invisível. Crie um
.vbs
arquivo como estee agende. O segundo argumento neste exemplo define o estilo da janela. 0 significa "esconder a janela".
Sintaxe completa do método Run :
Argumentos:
Você está executando isso como uma tarefa agendada? Se sim, configure-o para ser executado como uma conta de usuário diferente, então ele não ficará visível para o usuário conectado. Se o script não precisar de acesso à rede para itens que precisam de autenticação do Windows (como compartilhamentos de arquivos ou impressoras), você poderá executá-lo como "nt autoridade\sistema" e deixar a senha em branco. No Windows 7, basta definir o usuário para SYSTEM e pressionar OK.
(Você provavelmente terá que usar um usuário real se estiver usando robocopy ...)
JR
Basta configurar a tarefa agendada como "Executar se o usuário estiver conectado ou não".
Você também pode tentar CHP (Criar processo oculto) , faz exatamente o que você pensa ...
Executa sem janela de comando. Perfeito! Feito pelas mesmas pessoas que o CMDOW, mas este é mais apropriado.
CMDOW é uma ferramenta incrível que permite que você faça muitas, muitas coisas no Windows a partir da linha de comando.
Uma das coisas mais simples a fazer é ocultar a janela atual (geralmente como uma primeira linha no arquivo bat) com:
ou inicie um novo processo oculto com
Você pode criar um atalho para o arquivo de lote, definir o atalho para iniciar minimizado (nas propriedades do atalho, guia 'Atalho') e, em seguida, definir o trabalho para iniciar o atalho.
Importante : Você precisará especificar o caminho para o atalho manualmente digitando-o no campo de texto Executar, completo com a extensão '.lnk'; se você apenas tentar navegar até ele, ele se redirecionará de maneira útil para o que o atalho apontar.
Tente invocar o script com
Percebo que esta pergunta já foi respondida com uma resolução perfeitamente boa que é nativa do Windows e, portanto, deve ser a mais compatível, e concordo plenamente.
Eu também queria dizer que discordo do comentário de @splattne (mas não da resposta real) - que a resolução no outro tópico referenciado merece o crédito. Essa resposta envolve a execução do script como um usuário diferente (SYSTEM), que é praticamente o equivalente a dar ao script acesso root. Ele também falhará para trabalhos como
ROBOCOPY
(conforme referenciado por John Rennie), que exigem acesso à rede.Eu nunca tentei
CMDOW
antes, mas gostaria de oferecer outra resolução semelhante, que [embora não seja instalada nativamente no Windows] ainda é altamente portátil para a maioria das versões e vem em versões de 32 e 64 bits, e isso é NirCmd .O NirCmd é uma ferramenta muito poderosa que possui inúmeras opções, das quais a mais útil, pessoalmente, acho que é sua capacidade de iniciar janelas de comando ocultas simplesmente executando o seguinte:
Da
exec
seção de The NirCmd Command Reference :Executa um aplicativo e, opcionalmente, especifica um ou mais parâmetros de linha de comando para o aplicativo executado. O parâmetro [show/ hide /min/max] especifica se o aplicativo em execução ficará visível ou não. Se 'hide' for especificado, o aplicativo em execução não ficará visível para o usuário. Se 'max' for especificado, a janela do aplicativo em execução será maximizada. Se 'min' for especificado, a janela do aplicativo em execução será minimizada.
EDIT: Eu estava tentando executar um
ROBOCOPY
trabalho e tentei o método nesta resposta, e não funcionou, mesmo depois de editar os privilégios de acesso à rede. Tentei clicar duas vezes no script e não consegui fazê-lo funcionar, mas só consegui executá-lo em um prompt de comando elevado. Eu criei um atalho para o arquivo de lote e o executei como Administrador e consegui executá-lo clicando duas vezes nele, mas o método que acabei usando foi executá-lo oculto como SYSTEM (eu sei, eu sei) -- mas funciona comROBOCOPY
, pelo que vale a pena, desde que o arquivo de lote tenha as permissões corretas.EDIT 2: Por algum motivo, não funcionaria como SYSTEM (provavelmente a coisa de acesso à rede referenciada anteriormente) - eu só notei isso depois de realmente rodar
ROBOCOPY
sem o sinalizador /L, que é basicamente apenas uma simulação e [aparentemente] não na verdade me conecto ao sistema remoto, mas quando executo o arquivo em lotes com privilégios mais altos e marque a caixa oculta, ainda posso executá-lo como o usuário logado em segundo plano sem uma janela de comando exibida, seja o que for que isso valha a pena para qualquer pessoa .Outra solução que usei é o Hidden Start
Tente colocar um comando exit no final do seu arquivo de lote. Isso deve fechar a janela de comando quando o script for concluído.