2008-12-08 18 views
6

Estoy escribiendo un archivo por lotes, en el que llamo a EXE para ejecutar. Ahora, las instrucciones después de la llamada al EXE no deberían ejecutarse hasta que el EXE complete su ejecución. ¿Cómo puedo hacerlo en el archivo por lotes (en Windows)?¿Cómo puedo hacer que un archivo por lotes de windows se pause mientras se ejecuta un ejecutable?

+0

Creo que esto depende un poco de las aplicaciones que está ejecutando. Si la aplicación es un lanzador que lanza otros servicios o una GUI, entonces creo que hay poco que puede hacer sin escribir una aplicación para monitorear procesos y/o ventanas. –

Respuesta

0

Puede utilizar

PAUSE 

En secuencias de comandos por lotes, pero yo no entiendo su pregunta.

+0

'Pausa' para que el usuario presione una tecla. Eso no funcionará para un script automatizado ya que el usuario no está allí. James quiere un script automatizado para ejecutar un programa, esperar que termine y salir, luego ejecutar un segundo programa. –

6

Las declaraciones en un archivo por lotes se ejecutan secuencialmente. Por lo tanto, si su archivo por lotes se ve así:

first.exe 
next.exe 

Next se ejecuta si primero se completa.

+0

Pruébalo con explorer.exe y verás que vuelve después de que el programa se haya iniciado, no terminado. – paxdiablo

+0

@Pax: depende del alcance de la pregunta. En general, en un archivo de proceso por lotes, generalmente solo pone herramientas de línea de comandos, no herramientas de GUI. – PhiLho

+0

Normalmente, pero no siempre: tengo un archivo por lotes de inicio en mi cuadro virtual de trabajo desde casa que inicia el cliente VPN gráfico (luego correo, herramienta de error, etc.). Afortunadamente tiene un interruptor de línea de comando que hace que no regrese hasta que haya terminado ya que no pude arrancar/esperar para hacerlo.Pero tu punto es tomado. – paxdiablo

7

Depende de cómo funciona el .exe. Me temo que no tengo todos los detalles técnicos o la terminología, pero algunos archivos .exe devolverán el control de la sesión inmediatamente después de que hayan comenzado, mientras que otros no devolverán el control hasta después de que el programa haya finalizado.

El segundo caso es fácil, ya que los comandos que se ejecutan tarde en el archivo no se ejecutarán hasta que se completen los primeros, así que supongo que se enfrenta al caso n. ° 1.

Una solución alternativa/hack si la ejecución lleva (aproximadamente) la misma cantidad de tiempo cada vez que se ejecuta es utilizar un comando ping con un retraso.

PING 127.0.0.1 -n 1 -w 120000 >NUL 

Esto obligará al comando de ping a ejecutarse una vez con un retardo de 120000 ms (2 min).

También hay un buen artículo sobre un método más complejo (pero más confiable) en fpschultze.de con una explicación mucho más detallada. En resumen, consulta la lista de tareas buscando el ejecutable que está esperando. Tan pronto como no esté allí, continuará con el archivo por lotes. También usa el método ping, pero de una manera diferente.

+1

La forma correcta es en realidad: PING 127.1 -n 10 -w 1000> NUL – djangofan

+0

@djangofan: funcionó a la perfección con su corrección. – SFun28

+0

Lo sentimos, pero la solución alternativa de ping propuesta es simplemente terrible. Es propenso a errores y difícil de entender. Hay maneras muy superiores de hacer una pausa por algún tiempo (por ejemplo, tiempo de espera). – mafu

4

Puede usar el comando "start" con el parámetro/wait use start /? en línea de comandos para más detalles.

+0

Por más que lo intente, no pude obtener "start/wait explorer.exe" para realmente esperar ... – paxdiablo

13
START /WAIT First.exe 
START /WAIT Second.exe 
2

Aquí está el proceso muy simple. Hemos de tener la siguiente línea que esperar 10 segundos y luego continuar con el resto de comandos ...

TIMEOUT /T 10

Eso es todo lo que tiene que hacer. Espero que disfrutes mi técnica.

Cuestiones relacionadas