Mantenha o CMD aberto após a execução do arquivo BAT

169

Eu tenho um arquivo bat como este:

ipconfig

Isso imprimirá as informações de IP na tela, mas antes que o usuário possa ler essas informações, o CMD se fechará.

Acredito que o CMD assume que o script foi finalizado e, portanto, é fechado.

Como mantenho o CMD aberto após a conclusão do script?

pattyd
fonte
4
@RobKielty é a mesma pergunta tudo bem - mas aqui temos uma nova resposta (o que é melhor IMHO)
alfasin
@alfasin Isso não é o mesmo que a resposta de Rutger Nijlunsing?
precisa
@RobKielty Não, minha resposta não é a mesma que não usa, o pauseque é uma boa solução alternativa (e foi por isso que votei nessa resposta), mas não uma que realmente resolva o problema porque depois que o usuário bate Enterou Spacea janela se fecha. ..
alfasin

Respostas:

163

Dependendo de como você está executando o comando, você pode colocar /kdepois cmdpara manter a janela aberta.

cmd /k my_script.bat

Simplesmente adicionar cmd /kno final do seu arquivo em lotes também funcionará. Os nossos agradecimentos a Luigi D'Amico, que postou sobre isso nos comentários abaixo.

Jason Schindler
fonte
14
Depois de todos os seus scripts no seu arquivo bat - put -> cmd / k
Luigi D'Amico
3
Lembre-se de que, se o seu programa contiver erros sintáticos, a janela ainda fechará se você o executou com um clique duplo e cmd /kno final.
Tobias Feil
Isso não explica o fechamento das janelas do cmd se o usuário clicar duas vezes no arquivo.
K - A toxicidade no SO está crescendo.
238

Coloque pauseno final do seu arquivo .BAT.

ElGavilan
fonte
7
Isso é exatamente o que eu estava procurando, porque estou executando o arquivo bat na inicialização, não através de um comando CMD. +1
Hawkeye
3
Se você ainda deseja interagir com o arquivo bat após sua execução, substitua PAUSE por apenas cmd / k - depois que seus scripts forem executados, você poderá executar comandos manuais posteriormente no mesmo contexto
Luigi D'Amico
Eu não suporto ver que este não era o comentário "solução" para esta pergunta
Newhouse
57

Basta adicionar @pauseno final.

Exemplo:

@echo off
ipconfig
@pause

Ou você também pode usar:

cmd /k ipconfig
ZygD
fonte
5
o que o símbolo @ faz? Existe uma diferença entre @pause e pause?
Demonicdaron
3
@demonicdaron Resposta que explica o símbolo @: stackoverflow.com/a/21077142/2258
Richard Morgan #
Mas, neste caso, não deve fazer nenhuma diferença.
Florian Leitgeb
A diferença entre @pausee pausepode ser vista visualmente nesta resposta: stackoverflow.com/questions/17957076#60053224
ZygD
7

Adicionar pause(Windows 7) ao final não funcionou para mim,
mas adicionar o cmd /kcomando na frente do meu comando funcionou.

Exemplo:

cmd /k gradlew cleanEclipse
Robin
fonte
7

Quando o arquivo .bat é iniciado, não a partir da linha de comando (por exemplo, clique duas vezes).

echo The echoed text
@pause

at_pause

echo The echoed text
pause

pausa

echo The echoed text
cmd /k

cmd k

echo The echoed text & pause

e_pausa

ZygD
fonte
3

start cmd /kfez a mágica para mim. Na verdade, eu o usei para preparar o aplicativo cordova phonegap, ele executa o comando, mostra o resultado e aguarda o usuário fechá-lo. Abaixo está o exemplo simples

start cmd /k echo Hello, World!

O que eu usei no meu caso

start cmd /k cordova prepare

Atualizar

Você pode até ter um título para isso usando

start "My Title" echo Hello, World!

jafarbtech
fonte
1

Se você estiver iniciando o script na linha de comando, adicione exit /bpara manter o CMD aberto

Julito Sanchis
fonte
Praticamente não resolve a questão, pois modificar ipconfige outros arquivos em lotes internos é uma péssima idéia .
robinCTS
1

No Windows, adicione '& Pause' ao final do seu comando no arquivo.

samadadi
fonte
1

Eu também estava confuso sobre o motivo pelo qual estamos adicionando um cmdno início e estava pensando se teria que abrir o prompt de comando primeiro. O que você precisa fazer é digitar o comando completo junto com cmd /k. Por exemplo, suponha que o nome do seu arquivo em lote seja "my_command.bat", que executa o comando, javac my_code.javae o código no arquivo em lote deve ser:

cmd /k javac my_code.java

Portanto, basicamente, não há necessidade de abrir o prompt de comando na pasta atual e digite o comando acima, mas você pode salvar esse código diretamente no seu arquivo em lotes e executá-lo diretamente.

RustyCake
fonte
0
javac -d C:\xxx\lib\ -classpath C:\xxx\lib\ *.java

cmd cd C:\xxx\yourbat.bat

o segundo comando faz com que a janela do cmd não seja fechada. O importante é que você ainda possa inserir um novo comando

Huanfasdawq Huanfasd
fonte
0

Como nota lateral, isso também funciona ao executar um comando diretamente da barra de pesquisa no Windows.

por exemplo, a execução ipconfigdireta fechará diretamente a janela do cmd após a saída do comando.

insira a descrição da imagem aqui

Usar o cmd \k <command>will - que era o que eu estava tentando fazer quando encontrei esta resposta.

insira a descrição da imagem aqui

Ele tem a vantagem adicional de sempre reconhecer o comando que você está tentando executar. Por exemplo, correr a echo hello worldpartir da barra de pesquisa não funcionará porque não é um comando, no entanto, cmd \k echo hello worldfunciona muito bem.

sommmen
fonte