2017-06-22 3 views
0

Hier Datei meiner Partie ist:Batch-Datei Pause nicht nach Schleife

@echo off 
set rdslist=rds-instance-1 rds-instance-2 

:retryaction 
set /P action=Would you like to (1)start or (2)stop these instances %rdslist%: 

IF %action%==1 (
    set command=start 
    goto :start 
) 
IF %action%==2 (
    set command=stop 
    goto :start 
) 

goto :retryaction 

:start 
(for %%a in (%rdslist%) do (
    aws rds %command%-db-instance --db-instance-identifier %%a 
)) 
pause 

Dabei spielt es keine Pause, nachdem ich es laufen, aber wenn ich die pause vor oder innerhalb der for-Schleife hält es.

+6

Versuchen Sie, 'aws 'zu' call aws' zu ändern. – SomethingDark

+0

GOTO erfordert keinen Doppelpunkt für das Label. Ich brauche es nur für CALL. – Squashman

+0

@Squashman der Doppelpunkt nach 'goto' sollte nur die Ausführung des Skripts beeinflussen, wenn das Label' eof' ist ... – SteveFest

Antwort

0

aws ist ein anderes Skript, kein Programm. Wenn ein Stapelscript ein anderes Stapelscript ausführt, ohne den Befehl call zu verwenden, wird der Programmablauf permanent in dieses zweite Skript übertragen und kehrt nach Abschluss des Vorgangs nicht zum ersten Skript zurück. Wenn call verwendet wird, wird das zweite Skript ausgeführt, und dann wird der Ablauf an das übergeordnete Skript zurückgegeben.

Ändern Sie Ihre for Schleife

for %%a in (%rdslist%) do (
    call aws rds %command%-db-instance --db-instance-identifier %%a 
) 

so dass Ihre erste Skript am Laufen halten wird; Andernfalls wird das Skript beendet, nachdem die erste Instanz abgeschlossen wurde.