Cómo esperar a que finalice un proceso para ejecutar otro proceso en archivo por lotes

¿Cómo esperar a que un proceso finalice antes de ejecutar otro proceso en un archivo por lotes? Digamos que tengo un proceso notepad.exe que necesito matar antes de ejecutar wordpad.exe . Luego, cuando wordpad.exe finaliza, necesito iniciar notepad.exe nuevamente. ¿Cómo puedo hacer eso?

Prueba algo como esto …

 @ECHO OFF PSKILL NOTEPAD START "" "C:\Program Files\Windows NT\Accessories\wordpad.exe" :LOOP PSLIST wordpad >nul 2>&1 IF ERRORLEVEL 1 ( GOTO CONTINUE ) ELSE ( ECHO Wordpad is still running SLEEP 5 GOTO LOOP ) :CONTINUE NOTEPAD 

PSLIST y PSEXEC , pero también podría usar TASKKILL y TASKLIST . El >nul 2>&1 está ahí para ocultar todos los resultados de PSLIST . La línea SLEEP 5 no es obligatoria, pero está ahí para restringir la frecuencia con la que se comprueba si WordPad aún se está ejecutando.

Use el nombre del progtwig start / w para esperar el final del nombre del progtwig

 START /W notepad ECHO Back from notepad START /W wordpad ECHO Back from wordpad START /W notepad 

Esta es una versión actualizada de la Respuesta de aphoria.

Reemplacé PSLIST y PSEXEC con TASKKILL y TASKLIST`. Como parecen funcionar mejor, no pude hacer que PSLIST se ejecutara en Windows 7.

También reemplazó Sleep con TIMEOUT.

Esto era todo lo que necesitaba para ejecutar bien el script, y todas las adiciones fueron provistas por los geniales que publicaron los comentarios.

Además, si hay un retraso antes de que comience el .exe, podría valer la pena insertar un tiempo de espera antes del ciclo:.

 @ECHO OFF TASKKILL NOTEPAD START "" "C:\Program Files\Windows NT\Accessories\wordpad.exe" :LOOP tasklist | find /i "WORDPAD" >nul 2>&1 IF ERRORLEVEL 1 ( GOTO CONTINUE ) ELSE ( ECHO Wordpad is still running Timeout /T 5 /Nobreak GOTO LOOP ) :CONTINUE NOTEPAD 

Me gustó la respuesta “START / W”, aunque para mi situación encontré algo aún más básico. Mis procesos eran aplicaciones de consola. Y en mi ignorancia, pensé que necesitaría algo especial en la syntax de BAT para asegurarme de que el primero se completara antes de que comenzara el segundo. Sin embargo, BAT parece hacer una distinción entre aplicaciones de consola y aplicaciones de Windows, y las ejecuta de forma un poco diferente. El OP muestra que las aplicaciones de ventana se lanzarán como una llamada asincrónica desde BAT. Pero para las aplicaciones de consola, se invocan de forma síncrona, dentro de la misma ventana de comando en que se ejecuta BAT.

Para mí, en realidad era mejor no usar “START / W”, porque todo podía ejecutarse dentro de una ventana de comando. Lo molesto de “START / W” es que generará una nueva ventana de comando para ejecutar la aplicación de consola.

 call process1 call process2 

en este caso, el proceso2 no comenzará hasta que el proceso1 haya finalizado.