Cómo evitar el cierre automático de la consola después de la ejecución del archivo por lotes


510

¿Qué comando puedo poner al final de un archivo por lotes para evitar el cierre automático de la consola después de la ejecución del archivo?


55
Sería bueno si hay una manera de detectar si un archivo .cmd se inició haciendo doble clic en el explorador (entonces desea que se detenga al final) o si se inició mediante una línea de comando ya abierta. En el último caso (y especialmente si es ejecutado por otro programa) no desea la pausa. No he encontrado una buena solución para este caso (y normalmente uso una variable if% NOPAUSE%, pero esto solo funciona para programas principales, no para shells paremt).
Eckes

Respuestas:


635

En archivos por lotes de Windows / DOS:

pause

Esto imprime un buen "Press any key to continue . . . "mensaje

O, si no quieres el "Press any key to continue . . ."mensaje, haz esto en su lugar:

pause >nul

14
Ninguna de las sugerencias aquí funciona para mí al hacer doble clic en el archivo bat. Es un entorno de servidor (y tengo que ejecutar el script en él), por lo que podrían haber modificado el comportamiento. Eso no cambia mi objetivo. Para mantener abierta la ventana de comandos para poder escribir el mensaje de error.
Henrik Erlandsson

1
Sí, esto no siempre funciona dependiendo del entorno. Para una solución más robusta, vea mi respuesta a continuación. Esencialmente, simplemente haga set / p exitkey = "Presione cualquier tecla para continuar ..."
Steven Mark Ford

Tenga cuidado, si alguien ejecuta su secuencia de comandos sin la ventana de la consola (por ejemplo, a través del script vbscript), se bloqueará hasta que la elimine a través del Administrador de tareas.
Andry

Si es algo así como Maven, use CALL, stackoverflow.com/a/52205298/4485678
Kevin Roy

pausa funciona perfectamente aquí
Davidson Lima

141

Depende de la pregunta exacta!

Normalmente pausehace el trabajo dentro de un archivo .bat .

Si desea que cmd.exe no se cierre para poder seguir escribiendo, use el cmd /kcomando al final del archivo.


2
Si está ejecutando comandos de Windows a través del cuadro de diálogo Ejecutar, coloque cmd /kantes su comando. & cmd /kno funciona
Noumenon

68

Si desea que cmd.exe no se cierre y pueda continuar escribiendo, use cmd /k

Simplemente sentí la necesidad de aclarar qué /khace (desde el sitio web de Windows):

/k : Ejecuta el comando especificado por string y continúa.

Entonces, cmd /ksin un comando de seguimiento al final del archivo bat, solo mantendrá la cmd.exeventana abierta para su uso posterior.

Por otro lado, pauseal final de un archivo por lotes, simplemente pausará el proceso y terminará cmd.exeal presionar el primer botón


24

La siguiente forma de tener comandos en un archivo por lotes abrirá nuevas ventanas de símbolo del sistema y las nuevas ventanas no se cerrarán automáticamente.

start "title" call abcd.exe param1 param2  
start "title" call xyz.exe param1 param2

2
En mi caso, tuve un error durante la ejecución del comando de terminal, por lo que los comandos 'pausa' y 'cmd / k' no me ayudaron a detener la causa del error del programa. Este ejemplo me ayudó a mostrar, tengo un error y también me detuve bastante desde la terminal. ¡Gracias!
HowDoYouTellForAChild

20

Si está utilizando Maven y desea omitir el tipeo y evitar que la consola se cierre para ver el resultado, debe usar el CALLcomando en el script, además de 'mvn clean install'.

De esta manera cerrará la consola

ECHO This is the wrong exemple
mvn clean install
pause

Así la consola permanecerá abierta

ECHO This is the right exemple
CALL mvn clean install
pause

Si no usa el CALLcomando, ninguno de los ejemplos pasados ​​funcionará.


1
¡Muchas gracias! Impide que se cierre el aviso si falla el comando.
Timur Gilauri

1
Funcionó para mi. Quería ejecutar 2 comandos diferentes en 1 archivo bat. pero mi aviso se cerró después del primer comando. Poniendo call <myCommand>resuelto este problema: mi aviso dejó de cerrarse después de la primera ejecución
Zombkey

1
Respuesta más útil
gianmarcocalbi

14

Agregue cmd.execomo una nueva línea debajo del código que desea ejecutar:

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

cmd.exe

Esto es exactamente lo que estaba buscando, ¡gracias! La "pausa" simplemente no funcionará cuando su script de Python se bloquee. Lo que quería es ver un mensaje de error. Hasta ahora tenía que ejecutar mis scripts de Python a través de la consola
user70960

Pero esto funciona bien:python script.py %1 && cmd
user70960

¡Gracias! Esto ayudó! Estaba creando un archivo por lotes para ejecutar aplicaciones de Python.
fez.tival

10

mi manera es escribir un lote real (diciendo "foo.bat") para terminar el trabajo; luego cree otro "start.bat":

@echo off
cmd /k foo.bat

Creo que esto es extremadamente útil cuando configuro variables de entorno únicas.


1
Simplemente puede poner cmd /k(sin ningún comando) al final del foo.batarchivo y ejecutarlo. No necesitas un start.batarchivo separado .
ADTC


5

además pause.

set /p=

se puede usar. Esperará la entrada del usuario y liberará el flujo cuando se presione enter.

o

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

que hará lo mismo excepto que no se mostrará nada de la entrada del usuario ni permanecerá en el historial de comandos.


3

Posibilidad 1: solo crea 2 archivos .bat y escribe en el primero:

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

El archivo por lotes 2 es el archivo que no se cerrará al final. Entonces, cuando abra el lote nr.1, comenzará el segundo y se cerrará. Cuando finalice el segundo, no se cerrará por completo (siempre que no ponga la salida al final)

Posibilidad 2: archivo por lotes 1:

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

Cuando finalice el segundo archivo, continuará con el archivo 1 nuevamente y generará el resto. Con eso incluso puedes hacer manejadores de errores. Si nr.1 falla, entra en nr.2 y lo muestra


2

Este pequeño truco le pide al usuario que ingrese una clave y la almacena en la variable% exitkey% (aunque esta variable podría llamarse como quiera).

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

NB: el espacio después de '=' es muy importante



2

Sé que llego tarde pero mi forma preferida es:

:programend
pause>nul
GOTO programend

De esta forma, el usuario no puede salir con enter.


Creo que sí, ya que es una forma mejorada de evitar que la consola se cierre. Incluso si el usuario presiona una tecla, la consola permanece abierta. El usuario se verá obligado a salir solo al cerrar la ventana de la consola.
decadenza

2

Tuve problemas con las respuestas aquí, así que se me ocurrió esto, que funciona para mí (TM):

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

1

Hay dos formas de hacerlo dependiendo del caso de uso

1) Si desea que el indicador de cmd de Windows permanezca abierto para que pueda ver el resultado de la ejecución y cerrarlo después; utilizar

pause

2) si desea que el indicador de cmd de Windows permanezca abierto y le permita ejecutar algunos comandos posteriores; utilizar

cmd

ingrese la descripción de la imagen aquí


1

Fácil, agrega cmd a tu última línea de murciélago, ¡PERO! Si restablece o borra la ruta del sistema, debe iniciar su cmd con la ruta completa, como:

%windir%\system32\cmd.exe

Por ejemplo, tengo un archivo bat para restablecer jdk a la versión anterior 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 restablecí la ruta del sistema, tengo que ejecutar cmd con la ruta completa, o el sistema no puede encontrar cmd.exe, no podrá ejecutar cmd y simplemente cerrará la ventana y no podrá ver el mensaje de error .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.