Sei que já respondi a uma pergunta semelhante ( executando o arquivo em lote em segundo plano quando o Windows é inicializado ), mas desta vez eu preciso iniciar um lote:
- de outro lote,
- sem nenhuma janela do console exibida,
- com todos os argumentos passados para o lote invisível.
O primeiro lote é executado em uma janela do console. No entanto, não quero que o segundo lote (iniciado pelo primeiro de maneira assíncrona ) também exiba uma janela do console.
Eu criei um script VBScript que faz exatamente isso e coloquei o script como uma resposta para outras pessoas se referirem , mas se você tiver outras idéias / soluções, sinta-se à vontade para contribuir.
Nota: A janela do console do processador de comandos do Windows é nomeada como janela DOS não correta por muitas pessoas.
Obrigado a todos pelas respostas. Pelo que entendi, se eu precisar chamar assincronamente um script para executar em um modo invisível:
- A partir de um segundo script já em uma janela do console,
start /b
é suficiente. - No Windows, sem acionar uma segunda janela , minha solução ainda é válida.
fonte
Respostas:
Você precisa que o segundo arquivo em lotes seja executado de forma assíncrona? Normalmente, um arquivo em lotes executa outro de forma síncrona com o
call
comando, e o segundo compartilha a janela do primeiro.Você pode usar o
start /b
second.bat para iniciar um segundo arquivo em lote de forma síncrona do primeiro, que compartilha a janela do primeiro. Se os dois arquivos em lote gravarem no console simultaneamente, a saída será sobreposta e provavelmente indecifrável. Além disso, você desejará colocar umexit
comando no final do seu segundo arquivo em lote ou estará dentro de um segundocmd
shell quando tudo estiver pronto.fonte
Aqui está uma solução possível:
No seu primeiro script, chame seu segundo script com a seguinte linha:
Na verdade, você está chamando um script vbs com:
%*
)Em seguida, o invis.vbs chamará seu script com o método Windows Script Host Run () , que utiliza :
Aqui está o invis.vbs:
fonte
Converta o arquivo em lotes em um exe. Experimente o Conversor Bat To Exe ou o Conversor Online Bat To Exe e escolha a opção para executá-lo como um aplicativo fantasma, ou seja, sem janela.
fonte
Eu acho que essa é a solução mais fácil e mais curta para executar um arquivo em lotes sem abrir a janela do DOS; pode ser muito perturbador quando você deseja agendar um conjunto de comandos para serem executados periodicamente, para que a janela do DOS continue aparecendo, aqui está sua solução . Use um script VBS para chamar o arquivo em lotes ...
Copie as linhas acima para um editor e salve o arquivo com extensão .VBS. Edite o nome do arquivo .BAT e o caminho adequadamente.
fonte
Set WshShell = Nothing
, funcionou bem para mim e você pode ter uma maneira ainda menor de fazer isso.Aqui está minha coleção de maneiras de conseguir isso - e ainda mais - onde era possível. Tentei retornar também o PID do processo iniciado (todos os scripts vinculados podem ser baixados e salvos com o nome que achar conveniente):
1) A solução IEXPRESS pode ser usada mesmo em máquinas antigas win 95/98. O Iexpress é uma ferramenta realmente antiga que ainda é fornecida com o Windows - pois os argumentos aceitam apenas o comando e seus argumentos.
Exemplo de uso:
2) SCHTASKS - Novamente aceita apenas dois argumentos - o comando e os argumentos. Também verifica se foi iniciado com permissões elevadas e, se possível, obtém o PID do processo com WEVTUTIL (disponível no Vista e acima, para que a versão mais recente do Windows receba o PID).
Exemplo de uso:
3) 'WScript.Shell' - o script é um invólucro completo de 'WScript.Shell' e todas as opções possíveis podem ser definidas nas opções de linha de comando.É um híbrido jscript / batch e pode ser chamado de bastão.
Exemplo de uso (para obter mais informações, imprima a ajuda com '-h'):
4) 'Win32_ProcessStartup' - novamente o invólucro completo e todas as opções são acessíveis através dos argumentos da linha de comando. Desta vez, é um híbrido WSF / lote com alguns Jscript e alguns pedaços de código VBScript - mas retorna o PID do processo iniciado. Não oculto Algumas opções como coordenadas X / Y podem ser usadas (não aplicável a todos os executáveis - mas, por exemplo, o cmd.exe aceita coordenadas).
Exemplo de uso (para obter mais informações, imprima a ajuda com '-h'):
5) o. Solução NET . A maioria das opções das opções ProcessStartInfo são usadas (mas no final eu estava cansada demais para incluir tudo):
Exemplo de uso (para obter mais informações, imprima a ajuda com '-h'):
fonte
Na outra pergunta, sugeri autoexnt . Isso também é possível nessa situação. Basta definir o serviço para ser executado manualmente (ou seja, não é automático na inicialização). Quando você deseja executar seu lote, modifique o arquivo autoexnt.bat para chamar o arquivo em lote desejado e inicie o serviço autoexnt.
O arquivo em lote para iniciar isso pode ser assim (não testado):
Observe que os arquivos em lote iniciados dessa maneira são executados como usuário do sistema, o que significa que você não tem acesso aos compartilhamentos de rede automaticamente. Mas você pode usar o net use para se conectar a um servidor remoto.
Você precisa baixar o Windows 2003 Resource Kit para obtê-lo. O Resource Kit também pode ser instalado em outras versões do Windows, como o Windows XP.
fonte
Execute-o com um nome de usuário diferente, usando "runas" ou agendando-o com um usuário diferente nas Tarefas agendadas do Windows.
fonte
Você pode executar o arquivo .bat por meio de um arquivo .vbs
Copie o seguinte código no arquivo .vbs:
fonte
Você também pode usar
PS: Infelizmente, o status minimizado da janela depende do comando a ser executado. VG não funciona
fonte