Eu tenho uma tarefa agendada que inicia um script em lote que é executado a robocopy
cada hora. Toda vez que é executada, 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, executando o trabalho agendado
cmd /c start /min mybat.bat
mas isso me dá uma nova janela de comando a cada hora. Fiquei surpreso com isso, pois 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 ele aparecer uma janela do cmd?
Respostas:
Você pode executá-lo silenciosamente usando um arquivo de script do Windows. O método Run permite executar 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 "ocultar a janela".
Sintaxe completa do método Run :
Argumentos:
fonte
Você está executando isso como uma tarefa agendada? Se assim for, defina-o para ser executado como uma conta de usuário diferente, e 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 Authority \ system" e deixar a senha em branco. No Windows 7, defina o usuário como SYSTEM e pressione OK.
(Você provavelmente precisará usar um usuário real, se estiver usando robocopy ...)
JR
fonte
Simplesmente configure a Tarefa agendada como "Executar se o usuário estiver conectado ou não".
fonte
Você também pode tentar o CHP (Criar processo oculto) , faz exatamente o que você pensa ...
É executado sem janela de comando. Perfeito! Feito pelas mesmas pessoas que o CMDOW, mas isso é mais apropriado.
fonte
O CMDOW é uma ferramenta impressionante que permite fazer 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
fonte
Tente chamar o script com
fonte
start
não é um programa, é um comando. Você precisa especificarcmd
como o programa a ser executado e/c start /b <file>
como argumento. No entanto, isso ainda não vai funcionar porque ainda criará uma janela do consolecmd
e exibirá uma janela preta na tela.Você pode criar um atalho para o arquivo em lotes, definir o atalho para começar a ser 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 para ele, ele vai prestativamente redirecionar-se a qualquer que seja o atalho aponta para.
fonte
Sei que essa pergunta já foi respondida com uma resolução perfeitamente boa, nativa do Windows e, portanto, deve ser a mais compatível, e concordo completamente.
Eu também queria dizer que não concordo com o comentário de @ splattne (mas não com a resposta real) - que a resolução no outro segmento mencionado merece o crédito. Essa resposta envolve a execução do script como um usuário diferente (SYSTEM), que é praticamente o equivalente a dar acesso à raiz do script. Ele também falhará em trabalhos como
ROBOCOPY
(como mencionado por John Rennie), que exigem acesso à rede.Eu nunca tentei
CMDOW
antes, mas gostaria de oferecer outra resolução semelhante, que [embora não esteja instalada nativamente no Windows] ainda é altamente portátil para a maioria das versões e vem nas 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 a capacidade de iniciar janelas de comando ocultas, executando simplesmente o seguinte:
Na
exec
seção Referência do comando NirCmd :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 será visível ou não. Se 'ocultar' for especificado, o aplicativo em execução não estará 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.
Edição: 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 em lotes e o execute como administrador e consegui executá-lo clicando duas vezes nele, mas o método com o qual acabei indo foi executá-lo oculto como SYSTEM (eu sei, eu sei) - mas funcionaROBOCOPY
, pelo que vale, desde que o arquivo em lotes tenha as permissões corretas.EDIT 2: Por algum motivo, ele não funcionaria como SYSTEM (provavelmente o acesso à rede mencionado anteriormente) - só notei isso depois de executar
ROBOCOPY
sem o sinalizador / L, que é basicamente apenas uma simulação e [aparentemente] não funciona. na verdade, conecto-me ao sistema remoto, mas quando executo o arquivo em lotes com os maiores privilégios e marque a caixa oculta, ainda posso executá-lo como usuário logado em segundo plano, sem uma janela de comando, por qualquer valor que isso valha a alguém .fonte
Outra solução que usei é Hidden Start
fonte
Tente inserir um comando de saída no final do seu arquivo em lotes. Isso deve fechar a janela de comando quando o script for concluído.
fonte
Para ocultar a saída (embora não seja a janela), adicione isso no início do seu arquivo em lotes:
fonte