Sdílet prostřednictvím


about_Pokračovat

Krátký popis

Popisuje, jak příkaz continue okamžitě vrátí tok programu na začátek smyčky programu, příkaz switch nebo příkaz trap.

Dlouhý popis

Příkaz continue poskytuje způsob, jak ukončit aktuální řídicí blok, ale pokračovat v provádění, nikoli úplně ukončit. Příkaz podporuje popisky. Štítek je název, který přiřadíte k příkazu ve skriptu.

Používání příkazu continue ve smyčkách

Neoznačený continue příkaz okamžitě vrátí tok programu na začátek vnitřní smyčky, kterou řídí for, foreach, donebo příkaz while. Aktuální iterace smyčky se ukončí a smyčka pokračuje další iterací.

V následujícím příkladu se tok programu vrátí na začátek smyčky while, pokud je proměnná $ctr rovna 5. V důsledku toho se zobrazí všechna čísla mezi 1 a 10 s výjimkou 5:

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

    Write-Host -Object $ctr
}

Při použití smyčky for pokračuje provádění na příkaz <Repeat>, po kterém následuje test <Condition>. V následujícím příkladu nedojde k nekonečné smyčce, protože dekrementace $i nastane za klíčovým slovem continue.

#   <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--
    }
}

Použití příkazu continue se značkou ve smyčce

Příkaz s popiskem continue ukončí provádění iterace a přenese řízení do cílové obklopující iterace nebo popisku příkazu switch.

V následujícím příkladu se nejvnitřnější for ukončí, když je $conditionTrue, a iterace pokračuje se druhou smyčkou for 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
            }
        }
    }
}

Použití příkazu continue v příkazu switch

Neoznačený příkaz continue uvnitř switch ukončí provádění aktuální iterace smyčky switch a přenese řízení na začátek switch, aby získal další vstupní položku.

Pokud existuje jedna vstupní položka, continue ukončí celý příkaz switch. Když switch vstup je kolekce, switch testuje každý prvek kolekce. continue ukončí aktuální iteraci a switch pokračuje dalším prvkem.

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

Použití příkazu continue v příkazu pasti

Pokud je konečný příkaz spuštěný v těle trap, příkaz je continue, zachycená chyba se tiše ignoruje a provádění pokračuje příkazem bezprostředně následujícím po tom, který způsobil, že došlo k trap.

Nepoužívat pokračování mimo smyčku, přepínač nebo soutisk

Pokud continue se používá mimo konstruktor, který ho přímo podporuje (smyčky, switch, trap), PowerShell vyhledá zásobník volání pro uzavřený konstruktor. Pokud nemůže najít obklopující konstrukci, aktuální runspace se tiše ukončí.

To znamená, že funkce a skripty, které neúmyslně používají continue mimo uzavírající konstrukci, která ho podporuje, mohou neúmyslně ukončit své volající.

Použití continue uvnitř kanálu, například v bloku skriptu ForEach-Object, nejenže ukončí kanál, ale může také ukončit celý běhový prostor.

Viz také