2017-12-05 3 views
0

ich mehrere Befehle in einer Schleife in einer Batch-Datei wie diese abfeuern wollen:In Windows-Batch-Schleife, wie zu warten, gelaicht Prozesse vor abzuschließen fort

for /l %%x in (20170101,1,20170105) do (
start /wait C:\Progra~1\Amazon\AWSCLI\aws s3 cp s3://bucket1/%%x 
s3://bucket2/%%x --recursive 
) 

#do something else here only when ALL the above commands complete 

Wird die Start/warten haben der Effekt des Wartens, bis alle Befehle abgeschlossen sind, bevor zur nächsten Zeile nach der Schleife gewechselt wird?

+0

In der Theorie sollte es aber nach meiner Erfahrung habe ich einige Programme gesehen nicht respektieren die Wartezeit Option. Theoretisch sollten Sie nicht die "START/WAIT" verwenden müssen. Sie können sie entfernen und alles sollte wie vorgesehen funktionieren. Batch-Skripte werden Zeile für Zeile interpretiert. Die nächste Zeile wird erst ausgeführt, wenn die vorherige Zeile abgeschlossen ist. – Squashman

+0

Sie sagen, dass die nächste Schleifeniteration nicht stattfinden wird, bis die vorherige abgeschlossen ist? – EricBlair1984

Antwort

1

start /wait ist nicht "global", es wartet nur darauf, dass der gestartete Prozess beendet wird (vielleicht ... hängt davon ab, wie die Anwendung programmiert ist). Was Sie brauchen (mehrere Prozesse parallel starten und warten, bis der letzte fertig ist) kann mit einer anderen Methode durchgeführt werden: geben Sie alle Ihre Prozesse einen definierten Titel und beobachten sie:

@echo off 
setlocal enabledelayedexpansion 
for /l %%i in (1,1,10) do (
    start "OneOfMyProcesses" timeout !random:~-1! 
) 
echo waiting 
:loop 
timeout 1 >nul 
tasklist /v |find "OneOfMyProcesses" >nul && goto :loop 
echo all of them are finished 

Hinweis: wie oben erwähnt, diese kann oder darf nicht mit Ihre Anwendung

+0

Perfekt, es funktioniert wie erwartet! Vielen Dank. – EricBlair1984

Verwandte Themen