Freigeben über


about_Continue

Kurzbeschreibung

Beschreibt, wie die continue-Anweisung den Programmfluss sofort an den Anfang einer Programmschleife, einer switch-Anweisung oder einer trap-Anweisung zurückgibt.

Lange Beschreibung

Die continue-Anweisung bietet eine Möglichkeit, den aktuellen Kontrollblock zu beenden, aber die Ausführung fortzusetzen, anstatt vollständig zu beenden. Die Anweisung unterstützt Kennzeichnungen. Eine Bezeichnung ist ein Name, den Sie einer Anweisung in einem Skript zuweisen.

Verwendung von continue in Schleifen

Eine nicht bezeichnete continue-Anweisung gibt den Programmfluss sofort an den Anfang der innersten Schleife zurück, die von einer for, foreach, dooder while -Anweisung gesteuert wird. Die aktuelle Iteration der Schleife wird beendet, und die Schleife wird mit der nächsten Iteration fortgesetzt.

Im folgenden Beispiel wird der Programmfluss an den Anfang der while Schleife zurückgegeben, wenn die $ctr Variable gleich 5 ist. Daher werden alle Zahlen zwischen 1 und 10 mit Ausnahme von 5 angezeigt:

while ($ctr -lt 10)
{
    $ctr += 1
    if ($ctr -eq 5)
    {
        continue
    }

    Write-Host -Object $ctr
}

Wenn Sie eine for-Schleife verwenden, wird die Ausführung bei der <Repeat>-Anweisung fortgesetzt, gefolgt von dem <Condition>-Test. Im folgenden Beispiel tritt keine endlose Schleife auf, da die Dekrementierung von $i nach dem schlüsselwort continue erfolgt.

#   <Init>  <Condition> <Repeat>
for ($i = 0; $i -lt 10; $i++)
{
    Write-Host -Object $i
    if ($i -eq 5)
    {
        continue
        # Will not result in an infinite loop.
        $i--
    }
}

Verwendung einer gekennzeichneten continue-Anweisung in einer Schleife

Eine gekennzeichnete continue-Anweisung beendet die Ausführung der Iteration und übergibt die Kontrolle an das Ziel der umschließenden Iteration oder an die Kennzeichnung der switch-Anweisung.

Im folgenden Beispiel wird die innerste Schleife for beendet, wenn $conditionTrue ist und die Iteration mit der zweiten Schleife for bei labelBfortgesetzt wird.

:labelA for ($i = 1; $i -le 10; $i++) {
    :labelB for ($j = 1; $j -le 10; $j++) {
        :labelC for ($k = 1; $k -le 10; $k++) {
            if ($condition) {
                continue labelB
            } else {
                $condition = Update-Condition
            }
        }
    }
}

Verwendung von continue in einer switch-Anweisung

Eine nicht bezeichnete continue-Anweisung in einem switch beendet die Ausführung der aktuellen switch Iteration und überträgt die Steuerung an den Anfang der switch, um das nächste Eingabeelement abzurufen.

Wenn ein einzelnes Eingabeelement vorhanden ist, beendet continue die gesamte switch-Anweisung. Wenn die switch Eingabe eine Sammlung ist, testet die switch jedes Element der Auflistung. Die continue beendet die aktuelle Iteration, und die switch wird mit dem nächsten Element fortgesetzt.

switch (1,2,3) {
  2 { continue }  # moves on to the next element, 3
  default { $_ }
}
1
3

Verwendung von continue in einer trap-Anweisung

Wenn die letzte im Body einer trap-Anweisung ausgeführte Anweisung continue ist, wird der eingeschlossene Fehler stillschweigend ignoriert und die Ausführung wird mit der Anweisung fortgesetzt, die unmittelbar auf die Anweisung folgt, die das Auftreten von trap verursacht hat.

Verwenden Sie continue nicht außerhalb einer Schleife, eines Switch oder einer Trap

Wenn continue außerhalb eines Konstrukts verwendet wird, das es direkt unterstützt (Schleifen, switch, trap), sucht PowerShell auf dem Call-Stack nach einem einschließenden Konstrukt. Wenn es kein umschließendes Konstrukt findet, wird der aktuelle Runspace stillschweigend beendet.

Das bedeutet, dass Funktionen und Skripts, die versehentlich ein continue außerhalb eines umschließenden Konstrukts verwenden, das dieses unterstützt, ihre Aufrufer versehentlich beenden können.

Die Verwendung von continue innerhalb einer Pipeline, wie z. B. in einem ForEach-Object Skriptblock, beendet nicht nur die Pipeline, sondern möglicherweise den gesamten Ausführungsbereich.

Siehe auch