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?


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

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

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.


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


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

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


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

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.


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


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.


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


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



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.


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

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


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 .

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.