
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 10
no loop para desacelerar as verificações.