![cmd - executa um arquivo em lote após a conclusão de todos os outros arquivos em lote simultâneos](https://rvso.com/image/770100/cmd%20-%20executa%20um%20arquivo%20em%20lote%20ap%C3%B3s%20a%20conclus%C3%A3o%20de%20todos%20os%20outros%20arquivos%20em%20lote%20simult%C3%A2neos.png)
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.