Como fechar automaticamente a janela cmd após a execução do arquivo em lote?


88

Estou executando um arquivo em lote com estas duas linhas:

start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"
"C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow

Este arquivo em lote é usado para executar o aplicativo Xming e, em seguida, o aplicativo PuTTY para que eu possa acessar o laboratório de informática da minha universidade por SSH.

No entanto, se eu executar isso e o Xming ainda não estiver aberto, quando eu sair do terminal PuTTY, a janela cmd permanece aberta. Somente se eu já tiver executado o Xming, a janela cmd será fechada quando eu fechar o terminal PuTTY. Tentei adicionar exità última linha do arquivo em lote, mas sem sucesso.


1
é "C:\Program Files (x86)\Xming\Xming.exe"um parâmetro de putty.exe ou um comando separado?
bpoiss

Se a segunda linha for um segundo comando, tente adicionar start antes disso também.
Cinza

1
@BernhardPoiss é um comando separado, NÃO um parâmetro para putty.exe. Se eu colocar essa linha primeiro, ela trava e abre a massa. Se eu colocar start na frente dele, o Windows dirá "não foi possível encontrar 'C: \ Programa'. Verifique se ele está digitando corretamente.
yiwei

Respostas:


134

Modifique o arquivo em lote para STARTambos os programas, em vez de STARTtrocar um e CALLoutro

start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"
start "" "C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow

Se você executá-lo assim, nenhuma janela CMD permanecerá aberta após iniciar o programa.


28
+1 exceto quando você usa aspas duplas para o caminho, você deve adicionar um primeiro parâmetro de ""conforme o título se torna obrigatório. O segundo comando deve ser, start "" "C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindowcaso contrário, ele tentará abrir uma janela de comando intitulada C:\Program Files (x86)\Xming\Xming.exetentando executar :0com parâmetros-clipboard -multiwindow
Patrick Meinecke

Além disso, este start /B "GCFScape" "x64\GCFScape.exe">nulexemplo foi útil para mim
xacinay de

4
"Se o comando for um comando cmd interno ou um arquivo em lote, o processador do comando será executado com a opção / K para cmd.exe. Isso significa que a janela permanecerá após a execução do comando." ss64.com/nt/start.html
CAD bloke de

3
@CADbloke Seu problema mencionado pode ser resolvido usandocmd.exe /C "start cmd.exe /C [...].bat ..."
Thorsten Schöning

1
@ patrick-meinecke Obrigado por adicionar o comentário sobre "", estava frustrado porque isso estava me causando problemas. Eu li seu comentário e um momento ah ha se seguiu.
Michael Eakins

20

Normalmente, você termina um arquivo em lote com uma linha que diz apenas exit. Se você quiser ter certeza de que o arquivo foi executado e a janela do DOS fecha após 2 segundos, você pode adicionar as linhas:

timeout 2 >nul
exit

Mas o exitcomando não funcionará se seu arquivo em lote abrir outra janela, porque enquanto a segunda janela estiver aberta, a janela DOS antiga também será exibida.

SOLUÇÃO: Por exemplo, há um ótimo programa gratuito chamado BgInfo que exibe todas as informações sobre o seu computador. Supondo que esteja em um diretório chamadoC:\BgInfo , para executá-lo a partir de um arquivo em lote com a /popupopção e para fechar a janela do DOS enquanto ainda está em execução, use:

start "" "C:\BgInfo\BgInfo.exe" /popup
exit

ter /popuprealmente estava me dando um erro. Depois de remover tudo funcionou
Dmitry Efimenko

4

Se você quiser separar os comandos em um comando por arquivo, você pode fazer

cmd /c start C:\Users\Yiwei\Downloads\putty.exe -load "MathCS-labMachine1"

e no outro arquivo, você pode fazer

cmd /c start "" "C:\Program Files (x86)\Xming\Xming.exe" :0 -clipboard -multiwindow

O comando cmd / c fechará a janela do prompt de comando depois que o exe foi executado.


3

Isso funcionou para mim. Eu só queria fechar a janela de comando automaticamente após sair do jogo. Basta clicar duas vezes no arquivo .bat em minha área de trabalho. Sem atalhos.

taskkill /f /IM explorer.exe
C:\"GOG Games"\Starcraft\Starcraft.exe
start explorer.exe
exit /B

1

Eu tinha isso, adicionei EXITe inicialmente não funcionou, acho que por exigir o called program exitingconselho mencionado em outra resposta aqui, no entanto, agora funciona sem mais delongas - não tenho certeza do que causou isso, mas o ponto a ser observado é que estou chamar um arquivo de dados .htmlem vez do programa que lida com ele browser.exe, eu não editar qualquer outra coisa, mas basta dizer que é muito mais puro apenas usando um arquivo bat para acessar as principais páginas de acesso desses documentos web e só tendo title.bat, contents.bat,index.bat na pasta raiz com o resto do conteúdo em uma subpasta.

ie: contents.bat lê

cd subfolder
"contents.html"
exit

Também fica melhor se eu alterar os ícones do arquivo bat apenas para aqueles itens de acordo com o contexto em que estão, mas isso é outra questão, ocultar os arquivos bat na subpasta e criar atalhos de ícone personalizados para eles na pasta raiz com as imagens pediu a personalização também oculta.


0

Você pode tentar o algo perigoso: taskkill /IM cmd.exe..dangerous bcz que matará o cmd que está aberto e qualquer cmd aberto antes dele.

Ou adicione uma verificação para confirmar que você tinha o cmd.exe certo e, em seguida, elimine-o via PID, como este:

set loc=%time%%random%
title=%loc%
for /f "tokens=2 delims= " %%A in ('tasklist /v ^| findstr /i "%loc%"') do (taskkill /PID %%A) 

Substitua (pslist &&A)ou (tasklist /FI "PID eq %%A")por (taskkill /PID %%A)se quiser verificá-lo primeiro (e talvez ter o pstools instalado).


0

Apenas tente /sconforme listado abaixo.

Como a última linha no tipo de arquivo em lote:

exit /s

O comando acima fechará a janela do Windows CMD.

/s - representa silencioso como em (esperaria por uma entrada do teclado).


1
cmdO comando de saída de não tem uma /sopção (e seria inútil de qualquer maneira)
Stephan

-1

Adicione este código no final do código de execução

c: \ windows> sair


1
você leu a última frase da pergunta ?:I've tried adding exit to the last line of the batch file, but to no avail.
Stephan

Eu adicionei exit no final do meu script e ele realmente resolveu meu problema.
Attila,
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.