Como posso executar um programa a partir de um arquivo em lotes sem deixar o console aberto após o início do programa?

184

No momento, meu arquivo em lotes fica assim:

myprogram.exe param1

O programa inicia, mas a janela do DOS permanece aberta. Como posso fechá-lo?

Senhor Dev
fonte
3
Você provavelmente deve alterar a resposta aceita para a que Marshall postou.
precisa saber é o seguinte

Respostas:

163

Você pode usar a palavra-chave exit. Aqui está um exemplo de um dos meus arquivos em lotes:

start myProgram.exe param1
exit
Patrick Desjardins
fonte
18
Observe que isso não será bom se você estiver usando o console interativamente, em vez de apenas clicar duas vezes em um arquivo em lotes. Geralmente, há pouca ou nenhuma necessidade de colocar exitum arquivo em lotes.
Joey
27
Eu tentei este comando no Win8. Não tenho certeza se é diferente, mas observe que você deve fornecer um título de janela como seu primeiro parâmetro. Quando eu executá-lo da maneira Patrick descrito, seria apenas abrir uma nova linha de comandos com "MyProgram.EXE", como o título da janela:start "VPN" "C:\Program Files (x86)\Cisco\Cisco AnyConnect Secure Mobility Client\vpnui.exe"
Adam Plocher
9
Observe que se o seu comando contiver espaços e você o colocar entre aspas, você deverá adicionar um parâmetro entre aspas extra antes dele, pois o START interpreta o primeiro parâmetro entre aspas como nome da janela e apenas o segundo parâmetro como nome do comando.
David Balažic
259

Use o comando start para impedir que o arquivo em lotes aguarde o programa. Lembre-se de colocar aspas duplas vazias na frente do programa que você deseja executar após "Iniciar". Por exemplo, se você deseja executar o Visual Studio 2012 a partir de um comando em lote:

Start ""  "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe"

observe as aspas duplas após o início.

Marshall
fonte
55
@SharkAlley O formato apropriado éstart <window name> <program name>
Kruug 25/09
5
Essa é a resposta correta. Obrigado, as aspas duplas vazias são exatamente o que eu precisava.
Richard
Eu tenho um script de backup que eu executo semanalmente e o modificava levemente a cada semana, tentando fazê-lo: a) fechar meu programa, b) fazer backup dos meus dados ec) reiniciar o programa e fechar o prompt de comando. Isso finalmente conseguiu o prompt de comando para fechar (também impediu que meu próximo backup fosse acionado, eu tive que fechar esse prompt de comando !!!).
NobleUplift
@NobleUplift: Para mim, isso funcionou. Abaixo está a linha exata: "" "C: \ Arquivos de programas (x86) \ JetBrains \ IntelliJ IDEA 2016.2.5 \ bin \ idea64.exe" e
Xinus
53

Veja o comando START, você pode fazer isso:

START rest-of-your-program-name

Por exemplo, este arquivo em lotes aguardará até o bloco de notas sair:

@echo off
notepad c:\test.txt

No entanto, isso não vai:

@echo off
start notepad c:\test.txt
Lasse V. Karlsen
fonte
31

Da minha própria pergunta :

start /b myProgram.exe params...

funciona se você iniciar o programa a partir de uma sessão do DOS existente.

Caso contrário, chame um script vb

wscript.exe invis.vbs myProgram.exe %*

O método Windows Script Host Run () leva:

  • intWindowStyle: 0 significa "janelas invisíveis"
  • bWaitOnReturn: false significa que seu primeiro script não precisa aguardar o término do segundo script

Aqui está o invis.vbs:

set args = WScript.Arguments
num = args.Count

if num = 0 then
    WScript.Echo "Usage: [CScript | WScript] invis.vbs aScript.bat <some script arguments>"
    WScript.Quit 1
end if

sargs = ""
if num > 1 then
    sargs = " "
    for k = 1 to num - 1
        anArg = args.Item(k)
        sargs = sargs & anArg & " "
    next
end if

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.Run """" & WScript.Arguments(0) & """" & sargs, 0, False
VonC
fonte
1
+1 Tem que haver uma maneira mais fácil, mas esta é a única resposta que funcionou para mim.
DN
Obrigado - esse sinalizador / b era exatamente o que eu estava procurando.
ap
21

Esta é a única coisa que funcionou para mim quando tentei executar uma classe java a partir de um arquivo em lotes:

start "cmdWindowTitle" /B "javaw" -cp . testprojectpak.MainForm

Você pode personalizar o startcomando como desejar para o seu projeto, seguindo a sintaxe apropriada:

Syntax
      START "title" [/Dpath] [options] "command" [parameters]

Key:
   title      : Text for the CMD window title bar (required)
   path       : Starting directory
   command    : The command, batch file or executable program to run
   parameters : The parameters passed to the command

Options:
   /MIN       : Minimized
   /MAX       : Maximized
   /WAIT      : Start application and wait for it to terminate
   /LOW       : Use IDLE priority class
   /NORMAL    : Use NORMAL priority class
   /HIGH      : Use HIGH priority class
   /REALTIME  : Use REALTIME priority class

   /B         : Start application without creating a new window. In this case
                ^C will be ignored - leaving ^Break as the only way to 
                interrupt the application
   /I         : Ignore any changes to the current environment.

   Options for 16-bit WINDOWS programs only

   /SEPARATE   Start in separate memory space (more robust)
   /SHARED     Start in shared memory space (default)
Zosimas
fonte
18

Você deveria tentar isso. Inicia o programa sem janela. Na verdade, pisca por um segundo, mas desaparece rapidamente.

start "name" /B myprogram.exe param1
Chris Dail
fonte
4
A "title"opção é importante. Se o caminho do programa incluir espaços, ele deverá ser delimitado por aspas, portanto, será necessário adicionar "title"para evitar falhas.
AD
1
Se você fechar a janela principal, o processo em segundo plano 'myprogram.exe' também será fechado.
Aditya Gupta
14

Como resolver o "problema de espaço" e dependências locais:

@echo off
cd "C:\Program Files\HeidiSQL"
start heidisql.exe

cd "C:\Program Files (x86)\Google\Chrome\Application"
start chrome.exe

exit
Gilco
fonte
Esta não é uma resposta para a pergunta
jeb
2
verdade, mas acho que dá uma boa solução que resolve outros problemas que tive também.
Gilco
2
Foi a solução para mim. A janela Dos abre, mas fecha novamente e a solução funciona. Eu não entendo as downvotes (i upvoted)
JoeFox
Eu também. a solução funciona e resolve o problema
Gilco
2

Já existem muitas respostas para esta pergunta, mas estou postando isso para esclarecer algo importante, embora isso nem sempre seja o caso:

Start "C:\Program Files\someprog.exe"

Pode causar problemas em algumas versões do Windows, pois Startna verdade espera que o primeiro conjunto de aspas seja um título do Windows. Portanto, é recomendável primeiro citar duas vezes um comentário ou um comentário em branco:

Start "" "C:\Program Files\someprog.exe"

ou

Start "Window Title" "C:\Program Files\someprog.exe"
Gerhard
fonte
0

Minha solução para fazer isso na GUI:

  1. Crie um atalho para o programa que você deseja executar;

  2. Edite as propriedades do atalho;

  3. Mude o TARGETcampo para %COMSPEC% /C "START "" "PROGRAMNAME"";

  4. Mude o RUNcampo para minimizado.

Pronto! Veja como você gosta...

PS: Os parâmetros do programa podem ser inseridos entre as duas aspas finais; a PROGRAMNAMEcadeia pode ser um nome de arquivo, um caminho relativo ou um caminho absoluto - se você inserir um caminho absoluto e apagar a letra e o ponto-e-vírgula da unidade, isso funcionará em um pendrive, independentemente da letra que o computador host atribuir a ela. . (também, se você colocar o atalho na mesma pasta e preceder o nome do arquivo do programa PROGRAMNAMEcom a %CD%variável, os caminhos sempre corresponderão; o mesmo truque pode ser usado no START INcampo).

Midas
fonte
0

Se esse arquivo em lotes for algo que você deseja executar como agendado ou sempre; você pode usar a ferramenta de agendamento do Windows e ela não se abre em uma janela quando inicia o arquivo em lotes.

Para abrir Task Scheduler:

  • Iniciar -> Executar / Pesquisar -> 'cmd'
  • Digite taskschd.msc-> enter

No lado direito, clique Create Basic Taske siga os menus.

Espero que isto ajude.

Leustad
fonte
0

Aqui está a minha solução preferida. É retirado de uma resposta a uma pergunta semelhante.

Use um script VBS para chamar o arquivo em lotes:

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run chr(34) & "C:\path\to\your\batchfile.bat" & Chr(34), 0
Set WshShell = Nothing

Copie as linhas acima para um editor e salve o arquivo com extensão .VBS.

Ilyich
fonte