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?


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

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.


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

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

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)

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

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

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"

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).


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.


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.

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.