Como crio um arquivo em lote do Windows que não mostra o prompt de comando quando executado? [duplicado]


58

Instalei uma gema de rubi chamada Redcar, que é iniciada na linha de comando. Quando executado, ele rouba o shell até terminar, então eu tenho que criar uma nova janela do shell para continuar fazendo o trabalho da linha de comando. O shell que estou usando é o shell GITBash do MySysGit.

Encontrei um arquivo Redcar.bat que deve iniciar o Redcar como atalho, presumo, mas não quero que a janela extra do prompt de comando seja aberta sempre que iniciar o arquivo BAT.

Como executo o BAT sem ver o prompt?


11
Gostaria de saber a resposta para este +1 para uma boa pergunta.
Supercereal

@Kyle uma pergunta semelhante foi feita antes do superuser.com/questions/191149/how-to-execute-cmd-exe-silently mencionar o HSTART e mencionar brevemente que um arquivo VBS também pode iniciá-lo
barlop

Você pode atualizar sua resposta selecionada? É possível e muito simples quando você sabe como .. arquivo em lotes: linha 1: set var1=hello.txtlinha 2:start "test" notepad.exe "%~dp0%var1%"
Kody Brown

Basta usar ::ou @REM. Fonte: superuser.com/a/843754/101936
PHPst

Respostas:


38

Você não pode - executar um arquivo em lotes com o Prompt de Comando interno manterá uma janela aberta até que o arquivo em lotes saia.

O que você pode fazer é executar etapas para garantir que o arquivo em lotes saia o mais rápido possível. Se possível, modifique o arquivo em lotes para executar qualquer programa com o startcomando Por padrão, startretorna imediatamente sem aguardar a saída do programa, para que o arquivo em lotes continue sendo executado e, presumivelmente, saia imediatamente. Junte isso ao modificar seu atalho para executar o arquivo em lotes minimizado, e você só verá a barra de tarefas piscando sem sequer ver uma janela na tela.

Uma ressalva é que, se você estiver executando um programa no modo console, que são muitos intérpretes de script, o arquivo em lotes aguardará a saída do programa e o uso startgerará uma nova janela do console. O que você precisa fazer neste caso é executar a versão do interpretador baseada no Windows, em vez da versão baseada no console - não é startnecessário. Para Perl, você executaria em wperl.exevez de perl.exe. Para Python, é em pythonw.exevez de python.exe. A antiga distribuição win32 Ruby que baixei possui rubyw.exe, o que deve fazer a mesma coisa.

Uma possibilidade final é usar uma ferramenta de terceiros para executar o prompt de comando com uma janela oculta. Já ouvi falar dessas coisas, mas nunca tive utilidade para elas, por isso não conheço nada em particular para apontá-lo.


Obrigado que responde a minha pergunta. O que era realmente irritante não era que a janela de prompt aparecesse, mas que ela precisava permanecer aberta enquanto o programa estivesse em execução. Agora o flash é totalmente suportável e não é tão irritante. Verificarei se posso modificar o script para executar o rubyw em vez do ruby.
Jake

11
Muito obrigado por explicar a diferença entre "python" any "pythonw" - finalmente encontrei a solução para executar as ferramentas de janela python que temos sem o prompt de comando em segundo plano.
FP

'Java.exe' e 'javaw.exe' são os mesmos.
Redbeam_

Você pode - mas não no próprio código do lote. realmente há um número de Qs aqui com Como sobre como ocultar o prompt de comando superuser.com/questions/62525/… superuser.com/questions/191149/how-to-execute-cmd-exe-silently
barlop

21

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 VB para chamar o arquivo em lotes ...

Set WshShell = CreateObject("WScript.Shell" ) 
WshShell.Run chr(34) & "C:\Batch Files\ mycommands.bat" & Chr(34), 0 
Set WshShell = Nothing 

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. Em seguida, basta executar o arquivo .vbs e a mágica acontece!


8

Você pode executar outro arquivo em lotes com START / MIN CMD.EXE / C mybatchfile.bat no prompt de comando.

Do lado de fora, ele trará a janela do console do cmd, mas para evitar isso, você pode criar um arquivo de atalho com propriedades modificadas para começar a ser minimizada .


2
No Windows 8.1, esta opção está em Propriedades -> guia Atalho -> Executar: -> Minimizado (o padrão é "Janela Normal")
pix

5

Para fazer isso, use o programa Bat To Exe Converter para converter seu arquivo em lotes em um arquivo executável.

Ao converter em um executável, você encontrará uma opção para executar seu arquivo como um aplicativo invisível na seção de visibilidade. Assim, quando você executá-lo, ele será executado sem uma janela.

Morcego para exe


O site requer que o seu computador "resolva" o captcha criptográfico. Aqui está o programa nofile.io/f/q4o8dauVQ4P/Bat_To_Exe_Converter.zip
rluks

4

Continuando com a resposta de Dennis Williamson, você pode editar o arquivo em lotes e anexar (anexar) START /Bao comando que está executando.

Por exemplo, eu tenho um arquivo em lotes que executa o putty e tinha o mesmo problema (CMD extra), então foi assim que o escrevi:

@ECHO OFF
START / B putty.exe -load name_of_my_config_file

Funcionou perfeitamente.


4

Faça uma tentativa:

START /B batchfile

observação adicionada por barlop

iniciar /? diz de / B

 B           Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application.

3
Isso pode funcionar se eu tiver um prompt de comando aberto, mas quando estou usando o .bat, clique duas vezes nele ou em um atalho na área de trabalho. Estou tentando evitar ter que ter um prompt de comando para iniciar este programa.
Jake

3

Não estou claro quanto ao seu problema, mas com alguns dos meus arquivos em lotes, eu uso um "idiota", cujo único objetivo é iniciar o arquivo em lotes principal.

Então o GO.BAT terá:

cmd /c go2.bat %1 %2 %3
exit

A saída fecha a janela do prompt de comando que, de outra forma, permaneceria aberta.

E o GO2.BAT terá o conteúdo do arquivo em lote que eu desejo.

  @echo off
  set userid=

  if NOT [%1]==[] goto userid:
  set /p userid=Enter USERID:  
  goto set_usr:

 :userid
 set userid=%1
 shift

 :set_usr
 if %userid%==steven goto steven:
 ...


1

Se você ainda estiver interessado em não mostrar a janela do console, aqui está uma solução do stackoverflow que funcionou para mim (no meu caso, não coloquei nada no registro, mas onde precisava).


0

Basta colocar a opção / b na frente do caminho. Não abrirá o segundo prompt de comando.


0

A resposta da Indago tem sido a melhor solução para mim até agora. O arquivo VBS permite que eu execute a funcionalidade do lote por meio do script, impedindo que a janela do CMD aconteça em primeiro lugar. Existem algumas ressalvas:

  1. Se o seu lote exigir direitos de administrador, crie ou use um lote existente que chame o VBS e execute esse lote como Administrador.

  2. Sem visibilidade, pode ser difícil discernir se o que você está tentando fazer está realmente funcionando da maneira que deseja.

Com isso dito, eu colocaria um pequeno teste de configuração / unidade primeiro para garantir que ele funcionasse exatamente da maneira que você deseja, antes de integrá-lo.


0

Eu usei o cmdow no passado e parece ter funcionado para o que eu quero.

Você provavelmente desejará usar uma das seguintes opções: CMDOW [window] /HID

/HID oculta a janela especificada

CMDOW [window] /END

/END fecha a janela especificada

CMDOW [window] /CLS

/CLS pediu educadamente a janela para fechar (algumas janelas podem abrir uma caixa de diálogo)

Espero que isto ajude.


-5

Basta fazer um atalho para o arquivo em lotes, clicar com o botão direito do mouse, clicar em Properties, ir para a Generalguia, marcar a caixa chamada Hidden, clicar Applye continuar OK.
Agora, ao abrir o atalho, ele executará o arquivo em lotes Oculto.


Isso está errado, pois apenas oculta o arquivo de atalho / lote, enquanto o usuário deseja que seja um arquivo em lote para ser executado de forma invisível.
você
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.