windows - tag - Cómo evitar el cierre automático de la consola después de la ejecución del archivo por lotes.
tag folders (15)
¿Alguien puede decirme, qué comando colocar al final de un archivo por lotes para evitar el cierre automático de la consola después de la ejecución del archivo?
Si desea que cmd.exe no se cierre y puede continuar escribiendo, use
cmd /k
Simplemente sentí la necesidad de aclarar qué hace /k
(desde el sitio web de Windows):
/k
: ejecuta el comando especificado por cadena y continúa.
Por lo tanto, cmd /k
sin un comando de seguimiento al final del archivo bat solo mantendrá la ventana cmd.exe
abierta para su uso posterior.
Por otro lado, la pause
al final de un archivo por lotes simplemente hará una pausa en el proceso y terminará cmd.exe
en el primer botón presionando
Agregue cmd.exe
como una nueva línea debajo del código que desea ejecutar:
c:/Python27/python D:/code/simple_http_server.py
cmd.exe
Depende de la pregunta exacta!
Normalmente, la pause
hace el trabajo dentro de un archivo .bat .
Si desea que cmd.exe no se cierre para que pueda seguir escribiendo, use el comando cmd /k
al final del archivo.
En los archivos por lotes de Windows / DOS:
pause
Esto imprime un bonito mensaje "Press any key to continue . . . "
O, si no desea que "Press any key to continue . . ."
mensaje, haz esto en su lugar:
pause >nul
Este pequeño truco le pide al usuario que ingrese una clave y la almacena en la variable% exitkey% (esta variable podría llamarse como quieras).
set /p exitkey= "Press any key to continue..."
NB: el espacio después del ''='' es muy importante
Fácil, agrega cmd a tu última línea de bate, PERO! Si restablece o borra la ruta de su sistema, debe iniciar su cmd con la ruta completa, como:
%windir%/system32/cmd.exe
Por ejemplo, tengo un archivo bat para restablecer jdk a una 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
ya que reinicié 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 se puede ver el mensaje de error. .
La siguiente forma de tener comandos en un archivo por lotes abrirá nuevas ventanas de línea de comandos y las nuevas ventanas no se cerrarán automáticamente.
start "title" call abcd.exe param1 param2
start "title" call xyz.exe param1 param2
Llame a cmd
al final del archivo por lotes.
Posibilidad 1: Solo haga 2 archivos .bat y escriba en el primero:
start <filename> // name of 2nd batch file
exit
El archivo por lotes 2 es el archivo que no se cierra al final. Así que ahora cuando abres el lote nr.1 Comenzará el segundo y se cerrará. Cuando finalice el segundo, no se cerrará por completo (siempre y cuando no coloques exit 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, se procederá nuevamente al archivo 1 y se imprimirá el resto. Con eso incluso puedes hacer manejadores de errores. Si nr.1 se bloquea, entra en nr.2 y lo muestra
Sé que llego tarde pero mi manera preferida es:
:programend
pause>nul
GOTO programend
De esta manera el usuario no puede salir usando enter.
Si está utilizando Maven y desea omitir la escritura y evitar que la consola se cierre para ver el resultado que necesita para usar el comando CALL
en el script, además de la "instalación limpia mvn".
Así se 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 comando CALL
ninguno de los ejemplos de pasados funcionará.
además de pause
.
set /p=
se puede usar. Esperará la entrada del usuario y liberará el flujo cuando se presione Intro.
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.
mi manera es escribir un lote real (diciendo "foo.bat") para terminar el trabajo; luego crea otro "start.bat":
@echo off
cmd /k foo.bat
Encuentro que esto es extremadamente útil cuando configuro variables de entorno únicas.
Hay dos formas de hacerlo dependiendo del caso de uso.
1) Si desea que el indicador de Windows cmd permanezca abierto para poder ver el resultado de la ejecución y cerrarlo después; utilizar
pause
2) si desea que el indicador de Windows cmd permanezca abierto y le permita ejecutar algunas contraseñas de comandos; utilizar
cmd
pause
o
echo text to display
pause>nul