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.

Yiwei
fonte
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.

Ahmad
fonte
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
Adrian747
fonte
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.

Folha de jenna
fonte
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
desconexo
fonte
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.

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

melaço
fonte
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).

Salmaan
fonte
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

Shyam99
fonte
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,