about_Continue
Krótki opis
Opisuje sposób continue
natychmiastowego zwracania przepływu programu w górnej części pętli programu, switch
instrukcji lub trap
instrukcji.
Długi opis
Instrukcja continue
zapewnia sposób zakończenia bieżącego bloku sterowania, ale kontynuowania wykonywania, a nie całkowitego zakończenia. Instrukcja obsługuje etykiety.
Etykieta to nazwa przypisana do instrukcji w skrycie.
Używanie kontynuacji w pętlach
Instrukcja unlabeled continue
natychmiast zwraca przepływ programu do góry najbardziej wewnętrznej pętli kontrolowanej przez instrukcję for
, foreach
, do
lub while
. Bieżąca iteracja pętli jest przerywana, a pętla będzie kontynuowana przy następnej iteracji.
W poniższym przykładzie przepływ programu powraca do góry while
pętli, jeśli zmienna $ctr
jest równa 5. W rezultacie wszystkie liczby z zakresu od 1 do 10 są wyświetlane z wyjątkiem 5:
while ($ctr -lt 10)
{
$ctr += 1
if ($ctr -eq 5)
{
continue
}
Write-Host -Object $ctr
}
W przypadku korzystania z for
pętli wykonywanie jest kontynuowane w instrukcji <Repeat>
, a następnie <Condition>
test. W poniższym przykładzie pętla nieskończona nie zostanie wykonana, ponieważ dekrementacja $i
występuje po słowie continue
kluczowym.
# <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--
}
}
Używanie etykiety kontynuuj w pętli
Instrukcja oznaczona continue
etykietą kończy wykonywanie iteracji i transferuje kontrolkę do docelowej otaczającej iteracji lub switch
etykiety instrukcji.
W poniższym przykładzie najbardziej for
wewnętrzny jest przerywany, gdy $condition
jest true, a iteracja kontynuuje drugą for
pętlę na .labelB
: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
}
}
}
}
Używanie instrukcji continue w instrukcji switch
Instrukcja nieoznakowana continue
w ramach switch
zakończenia wykonywania bieżącej switch
iteracji i transferuje kontrolkę do góry switch
elementu w celu pobrania następnego elementu wejściowego.
Gdy istnieje pojedynczy element continue
wejściowy, kończy całą switch
instrukcję.
switch
Gdy dane wejściowe są kolekcją, testuje switch
każdy element kolekcji. Element continue
kończy bieżącą iterację i switch
kontynuuje działanie przy użyciu następnego elementu.
switch (1,2,3) {
2 { continue } # moves on to the next element, 3
default { $_ }
}
1
3
Używanie instrukcji kontynuuj w pułapce
Jeśli ostateczna instrukcja wykonana w treści trap
instrukcji to continue
, uwięziony błąd jest dyskretnie ignorowany i wykonywanie będzie kontynuowane z instrukcją bezpośrednio po instrukcji, która spowodowała trap
wystąpienie.
Nie należy używać kontynuacji poza pętlą, przełącznikiem lub pułapką
Gdy continue
jest używany poza konstrukcją, która bezpośrednio ją obsługuje (pętle, switch
, trap
), program PowerShell wyszukuje stos wywołań dla konstrukcji otaczającej. Jeśli nie można odnaleźć otaczającej konstrukcji, bieżąca przestrzeń uruchamiania jest po cichu zakończona.
Oznacza to, że funkcje i skrypty, które przypadkowo używają continue
zewnętrznej konstrukcji otaczającej, która ją obsługuje, mogą przypadkowo zakończyć ich rozmówców.
Użycie continue
wewnątrz potoku, takiego jak ForEach-Object
blok skryptu, nie tylko kończy potok, ale potencjalnie kończy całą przestrzeń uruchamiania.