cmd: ejecuta un archivo por lotes después de que finalicen todos los demás archivos por lotes simultáneos

cmd: ejecuta un archivo por lotes después de que finalicen todos los demás archivos por lotes simultáneos

Tengo un archivo por lotes simple que llama a otros archivos por lotes y se ve así:

start /b run_part1.bat
start /b run_part2.bat
start /b run_part3.bat
start /b run_part4.bat

run_last.bat  // fires immediately, how to make this line wait until above finishes?

Con /b los primeros 4 archivos se ejecutarán simultáneamente. Todo terminará en 1,5 horas.

Necesito otro script para hacer una limpieza después de que finalicen los cuatro archivos. Sin embargo, run_last.bat no esperará a los primeros 4 archivos, se llama al mismo tiempo que los primeros 4.

¿Hay alguna manera de lograrlo?

Gracias.

Respuesta1

Deje de usar el anticuado símbolo del sistema y use Powershell. Puedes usar elMódulo ThreadJob, como se describe enesta excelente respuesta en SO:

$commands = { ./run_part1.bat },
            { ./run_part2.bat },
            { ./run_part3.bat },
            { ./run_part4.bat }
$jobs = $commands | Foreach-Object { Start-ThreadJob $_ }
$jobs | Receive-Job -Wait -AutoRemoveJob
./run_last.bat 

Respuesta2

puedes usar CALL, llama a un archivo de baño desde otro archivo de baño

para más información consultarhttps://www.robvanderwoude.com/call.php

Respuesta3

No hay nada integrado en los archivos por lotes para manejar esto.

Puede modificar los 4 archivos por lotes para crear un archivo de bandera cuando estén listos. Luego, en el archivo por lotes principal, ejecute un bucle buscando los archivos de bandera con una llamada timeout /t 10en el bucle para ralentizar las comprobaciones.

información relacionada