2011-01-12 15 views
39

Estoy creando un archivo por lotes simple para ayudar en algunas cosas, y tengo algunas instrucciones que se imprimen también que quiero que el usuario vea antes de salir. Actualmente, la ventana se cierra muy rápido. Así que agregué PAUSE al final del archivo, pero no quiere funcionar.Comando Archivo por lotes PAUSA no funciona

Miré otras preguntas en SO y he comprobado que las terminaciones de línea son CRLF y que tengo CRLF al final del archivo.

¿Alguna sugerencia?

+1

Estás haciendo algo más equivocado. Lo intenté de nuevo y funciona perfectamente bien para mí. –

+1

Honestamente, no sé por qué, pero ha comenzado a funcionar hoy. Mis disculpas por esto, pero no tengo idea de lo que sucedió. ¡Ni siquiera cambié el guión! – Samaursa

Respuesta

3

¿El último comando antes de la pausa se ejecuta con éxito? ¿Te importa compartir tu guión, al menos los últimos comandos?

Alternativamente, dado que parece que está usando Windows7, pruebe el comando Timeout y vea si está funcionando.

+0

Bueno, si 'pause' * es * llamado, funcionará. Usar 'timeout' en cambio no cambiará eso (excepto que está llamando a un programa separado en lugar de un shell-builtin).Supongo que hay un 'goto: eof' o' exit/b' en algún lugar antes de la 'pausa' (no es raro en los archivos de proceso por lotes con subrutinas, donde no puedes simplemente agregar comandos al final para ejecutarlos). – Joey

+0

¿Qué debe hacer si el último comando arroja una excepción, que es mi caso? –

94

Si el último comando falla, la pausa no funcionará.

Puede solucionarlo poniendo "call" detrás del comando que está ejecutando (el comando que esté antes de la pausa) y luego la pausa funcionará.

Así, por ejemplo, tuve un archivo por lotes PHPUnit que se veía así:

phpunit tests/sometests.php 
pause 

Cuando PHPUnit defectuosa a la que acaba de salir sin hacer una pausa. Cambiarlo a esto hizo que pause correctamente:

call phpunit tests/sometests.php 
pause 
+12

Gracias por esto, funcionó para mí también. En una nota lateral, parece que no tiene que fallar, si el comando anterior tiene algún tipo de código de salida (incluso en caso de éxito) en él, entonces parece cerrar la ventana. –

+3

'CALL' también funcionó bien. – JSmyth

+0

Agregar 'call' no tuvo ningún efecto para mí en el símbolo del sistema de Windows 10 que se ejecutaba como administrador. No sé por qué el comando 'pause' en mis archivos por lotes (abierto por AutoHotKey) de repente dejó de funcionar hoy. No sé qué cambió. Habían trabajado durante semanas. – Ryan

1

Creo que sé dónde está el problema, tuve el mismo problema. Entonces, si lo haces así, estás creando un archivo nuevo y poniendo toda la información del lote dentro de él y guardándolo como el texto normal, y después de esto simplemente renombra la extensión, no funcionará :). Tienes que guardarlo a través del editor de texto y desde allí tienes que elegir "Archivo por lotes (.bat; .cmd; * nt)" por ejemplo Notepad ++, es probablemente debido a la codificación así que hazlo así y yo entonces estará bien. GL! :)

2

Estaba teniendo problemas incluso en echo ... suponiendo que fue causado por un archivo por lotes largo ... Pausa se estaba ejecutando pero no estaba en pausa, era casi como si estuviera presionando una tecla después de Pausa ejecutado.

Probé las soluciones sugeridas anteriormente; ninguno funcionó.

lo tanto, sólo para referencia futura, esto es lo que hice:

Básicamente, sólo "pausa> nul & & pausa> nul"; funciona todo el tiempo

@echo off 

CALL :ForcePause "Press any key to resume." 
ECHO. 
ECHO Hello World! 
ECHO. 
CALL :ForcePause "Press any key to exit." 

EXIT 

REM You can remove echo if you don't want to pass custom string for pause 
:ForcePause 
echo %~1 
pause > nul && pause > nul 
GOTO :EOF 
+0

'pause> nul' definitivamente funciona, simplemente doesn ' t dar el mensaje 'presione cualquier tecla ...' –

+0

Claro en el mundo perfecto, pero como he mencionado algunas veces no es esta la solución. – Zunair

0

Así, además de la respuesta de Tim, si desea que la ventana para mostrar siempre, se puede escribir el archivo .bat como:

call phpunit tests/sometests.php 
cmd /k 
+0

Por favor, publícalo como comentario en la respuesta de Tim. Esta no es una respuesta completa en sí misma. – Marcel

+0

@Marcel ¿disminuiste mi respuesta solo porque la dejo como una respuesta en lugar de un comentario? – Justin

+0

Sí, lo hice. Está bien, pero esto realmente debería ser un comentario. Es corto y definitivamente está muy relacionado con la respuesta. – Marcel

Cuestiones relacionadas