Como impedir o fechamento automático do console após a execução do arquivo em lotes

510

Que comando posso colocar no final de um arquivo em lotes para impedir o fechamento automático do console após a execução do arquivo?

Joe
fonte
5
Seria bom se houvesse uma maneira de detectar se um arquivo .cmd foi iniciado com um clique duplo no explorer (então você deseja que seja pausado no final) ou se foi iniciado por uma linha de comando já aberta. No caso posterior (e especialmente se executado por outro programa), você não deseja a pausa. Eu não encontrei uma boa solução para esse caso (e normalmente uso uma variável if% NOPAUSE%, mas isso funciona apenas para programas pai e não para shells paremt).
Eckes
1
Existe uma maneira: stackoverflow.com/questions/3551888/…
EM0 17/17/17

Respostas:

635

Nos arquivos em lotes do Windows / DOS:

pause

Isso imprime uma boa "Press any key to continue . . . "mensagem

Ou, se você não quiser a "Press any key to continue . . ."mensagem, faça o seguinte:

pause >nul
Dave Bauman
fonte
14
Nenhuma das sugestões aqui funciona para mim ao clicar duas vezes no arquivo bat. É um ambiente de servidor (e eu tenho que executar o script), para que eles possam ter modificado o comportamento. Isso não muda meu objetivo. Para manter a janela de comando aberta para que eu possa, digite a mensagem de erro.
Henrik Erlandsson 28/10
1
Sim, isso nem sempre funciona, dependendo do ambiente. Para uma solução mais robusta, veja minha resposta abaixo. Essencialmente, basta definir / p exitkey = "Pressione qualquer tecla para continuar ..."
Steven Mark Ford
Cuidado, se alguém executar seu script sem a janela do console (por exemplo, através do vbscript), ele ficará travado até que você o mate pelo Gerenciador de Tarefas.
Andry
Se o seu algo como Call uso maven, stackoverflow.com/a/52205298/4485678
Kevin Roy
pausa funciona perfeitamente aqui
Davidson Lima
141

Depende da pergunta exata!

Normalmente pausefaz o trabalho em um arquivo .bat .

Se você deseja que o cmd.exe não feche para poder continuar digitando, use o cmd /kcomando no final do arquivo.

Rutger Nijlunsing
fonte
2
Se você estiver executando comandos do Windows na caixa de diálogo Executar, coloque cmd /kantes do seu comando. & cmd /knão vai funcionar.
Noumenon
68

Se você deseja que o cmd.exe não feche e possa continuar digitando, use cmd /k

Apenas senti a necessidade de esclarecer o que /kfaz (no site do Windows):

/k : Executa o comando especificado por string e continua.

Portanto, cmd /ksem o comando de acompanhamento no final do arquivo bat, apenas a cmd.exejanela será aberta para uso posterior.

Por outro lado, pauseno final de um arquivo em lotes, basta pausar o processo e terminar cmd.execom o primeiro pressionamento do botão

Pedra dos Namorados
fonte
24

A maneira abaixo de ter comandos em um arquivo em lotes abrirá novas janelas de prompt de comando e as novas janelas não sairão automaticamente.

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2
user6928445
fonte
2
No meu caso, tive algum erro durante a execução do comando terminal e, portanto, os comandos 'pause' e 'cmd / k' não me ajudaram a interromper o programa por causa do erro. Este exemplo me ajudou a mostrar, tenho erro e também parei para bastante do terminal. Obrigado!
HowDoYouTellForAChild
19

Se você estiver usando o Maven e desejar pular a digitação e impedir que o console se feche para ver o resultado, você precisará usar o CALLcomando no script, além de apenas a 'instalação limpa do mvn'.

Assim fechará o console

ECHO This is the wrong exemple
mvn clean install
pause

Assim o console ficará aberto

ECHO This is the right exemple
CALL mvn clean install
pause

Se você não usar o CALLcomando, nenhum dos exemplos passados ​​funcionará.

Andrey Hartung
fonte
1
Muito obrigado! Impede que o prompt seja fechado se o comando falhar.
Timur Gilauri
1
Funcionou para mim. Eu queria executar 2 comandos diferentes em um arquivo bat. mas meu prompt foi fechado após o primeiro comando. Colocando call <myCommand>resolvido este problema: Meu fechamento imediato Stoped após a primeira execução
Zombkey
1
Resposta mais útil
gianmarcocalbi
14

Adicione cmd.execomo uma nova linha abaixo do código que você deseja executar:

c:\Python27\python D:\code\simple_http_server.py

cmd.exe
lyfing
fonte
Isto é exatamente o que eu estava procurando, obrigado! A "pausa" simplesmente não funcionará quando o script python for interrompido. O que eu queria é ver uma mensagem de erro. Até agora eu tinha que executar meus scripts python no console
user70960
Mas isso funciona bem:python script.py %1 && cmd
user70960
Obrigado! Isso ajudou! Eu estava criando um arquivo em lotes para executar aplicativos python.
fez.tival
10

minha maneira é escrever um lote real (dizendo "foo.bat") para concluir o trabalho; então crie outro "start.bat":

@echo off
cmd /k foo.bat

Acho que isso é extremamente útil quando eu configuro variáveis ​​de ambiente únicas.

Erich Chen
fonte
1
Você pode simplesmente colocar cmd /k(sem nenhum comando) no final do foo.batarquivo e executá-lo. Você não precisa de um start.batarquivo separado .
ADTC
9

Ligue cmdno final do arquivo em lotes.

user4155296
fonte
5

além disso pause.

set /p=

pode ser usado. Esperará a entrada do usuário e liberará o fluxo quando pressionar enter.

ou

runas /user:# "" >nul 2>&1

que fará o mesmo, exceto que nada da entrada do usuário será exibido nem permanecerá no histórico de comandos.

npocmaka
fonte
3

Possibilidade 1: Basta criar 2 arquivos .bat e escrever no primeiro:

start <filename> // name of 2nd batch file
exit

O arquivo em lote 2 é o arquivo que não será fechado no final. Então agora, quando você abrir o lote nº 1, ele iniciará o segundo e se esconderá. Quando o 2º terminar, ele não fechará completamente (desde que você não coloque a saída no final)

Possibilidade 2: arquivo de lote 1:

call <filename>
cls
echo End of file
pause
<any code you want>

Quando o 2º arquivo terminar, ele continuará com o arquivo 1 novamente e exibirá o restante. Com isso, você pode até fazer manipuladores de erros. Se o nr.1 travar, ele entra no nr.2 e o exibe

BlazeLP
fonte
2

Esse pequeno truque solicita que o usuário insira uma chave e a armazene na variável% exitkey% (essa variável pode ser chamada como você quiser).

set /p exitkey= "Press any key to continue..."

NB: o espaço após o '=' é muito importante

Steven Mark Ford
fonte
2
pause

ou

echo text to display
pause>nul
Zenedus
fonte
2

Eu sei que estou atrasado, mas meu caminho preferido é:

:programend
pause>nul
GOTO programend

Dessa forma, o usuário não pode sair usando enter.

decadenza
fonte
Acho que sim, pois é uma maneira aprimorada de impedir o fechamento do console. Mesmo se o usuário pressionar uma tecla, o console permanecerá aberto. O usuário será forçado a sair apenas fechando a janela do console.
Decadenza 11/1118
2

Tive problemas com as respostas aqui, então eu vim com isso, o que funciona para mim (TM):

cmd /c node_modules\.bin\tsc
cmd /c node rollup_build.js
pause
lama12345
fonte
1

Há duas maneiras de fazer isso depende do caso de uso

1) Se você deseja que o prompt do cmd do Windows permaneça aberto para poder ver o resultado da execução e fechá-lo depois; usar

pause

2) se você deseja que o prompt do cmd do Windows permaneça aberto e permita que você execute algumas palavras-chave de comando; usar

cmd

insira a descrição da imagem aqui

Hitesh Sahu
fonte
1

Fácil, adicione cmd à sua última linha de bastão, MAS! se você redefinir ou limpar o caminho do sistema, deverá iniciar o cmd com o caminho completo, como:

%windir%\system32\cmd.exe

Por exemplo, eu tenho um arquivo bat para redefinir o jdk para a versão antiga como esta:

PATH=C:\Program Files\Java\jdk1.6.0_45\bin;C:\apache-ant-1.7.1\bin
SET JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45
%windir%\system32\cmd.exe

desde que redefini o caminho do sistema, tenho que executar o cmd com o caminho completo ou o sistema não consegue encontrar o cmd.exe, ele falha ao executar o cmd e fecha a janela e você não vê o erro msg .

Wei Kleeff
fonte