about_Continue
Krótki opis
Opisuje sposób continue
natychmiastowego zwracania przepływu programu do góry pętli programu, switch
instrukcji lub trap
instrukcji.
Długi opis
Instrukcja continue
zapewnia sposób zamykania bieżącego bloku sterowania, ale kontynuowania wykonywania, a nie całkowitego zakończenia. Instrukcja obsługuje etykiety.
Etykieta to nazwa przypisana do instrukcji w skry skrycie.
Używanie kontynuacji w pętlach
Instrukcja bez etykiet continue
natychmiast zwraca przepływ programu na górę pętli najwspanedniejszych, które jest kontrolowane przez instrukcję for
, foreach
, do
lub while
. Bieżąca iteracja pętli jest przerywana, a pętla kontynuuje kolejną iterację.
W poniższym przykładzie przepływ programu powraca do góry while
pętli, jeśli zmienna $ctr
jest równa 5. W związku z tym 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 przenosi kontrolkę do docelowej otaczającej iteracji lub switch
etykiety instrukcji.
W poniższym przykładzie najbardziej wewnętrzna for
wartość jest przerywana, gdy $condition
parametr ma wartość True , a iteracja będzie kontynuowana z drugą for
pętlą o wartości 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
Nieoznaczonej continue
instrukcji w ramach switch
zakończenia wykonywania bieżącej switch
iteracji i transferuje kontrolkę do góry switch
obiektu w celu pobrania następnego elementu wejściowego.
Gdy istnieje jeden 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 z następnym elementem.
switch (1,2,3) {
2 { continue } # moves on to the next element, 3
default { $_ }
}
1
3
Używanie instrukcji continue w pułapce
Jeśli ostateczna instrukcja wykonywana w treści trap
instrukcji to continue
, błąd uwięziony jest dyskretnie ignorowany, a wykonanie 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ń uruchomieniowa jest po cichu przerywana.
Oznacza to, że funkcje i skrypty, które przypadkowo używają continue
zewnętrznej konstrukcji otaczającej, która ją obsługuje, mogą przypadkowo przerwać 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.