cmd - executa um arquivo em lote após a conclusão de todos os outros arquivos em lote simultâneos

cmd - executa um arquivo em lote após a conclusão de todos os outros arquivos em lote simultâneos

Eu tenho um arquivo em lote simples que chama outros arquivos em lote, fica assim:

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?

Com o /b os primeiros 4 arquivos serão executados simultaneamente. Tudo terminará dentro de 1,5 horas.

Preciso de outro script para fazer uma limpeza depois que todos os quatro arquivos terminarem. Porém o run_last.bat não irá esperar pelos 4 primeiros arquivos, ele é chamado ao mesmo tempo com os 4 primeiros.

Existe uma maneira de conseguir isso?

Obrigado.

Responder1

Pare de usar o prompt de comando antiquado e use o Powershell. Você pode usar oMódulo ThreadJob, conforme descrito emesta excelente resposta no 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 

Responder2

você pode usar CALL, ele chama um arquivo de banho de outro arquivo de banho

para mais informações verifiquehttps://www.robvanderwoude.com/call.php

Responder3

Não há nada embutido nos arquivos em lote para lidar com isso.

Você pode modificar os 4 arquivos em lote para criar um arquivo de sinalização quando terminar. Em seguida, no arquivo em lote principal, execute um loop procurando os arquivos de sinalização com uma chamada timeout /t 10no loop para desacelerar as verificações.

informação relacionada