О продолжении

Краткое описание

Описывает, как инструкция continue немедленно возвращает поток программы в начало цикла программы, switch оператора или оператора trap .

Подробное описание

Оператор continue предоставляет способ выхода из текущего блока управления, но продолжить выполнение, а не полностью выйти. Оператор поддерживает метки. Метка — это имя, присвоенное инструкции в скрипте.

Использование продолжения в циклах

Оператор без меток continue немедленно возвращает поток программы в начало самого внутреннего цикла, управляемого оператором for, foreachdoили while оператором. Текущая итерация цикла завершается, и цикл продолжается с следующей итерацией.

В следующем примере поток программы возвращается в начало while цикла, если $ctr переменная равна 5. В результате отображаются все числа от 1 до 10, за исключением 5:

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

    Write-Host -Object $ctr
}

При использовании for цикла выполнение продолжается в инструкции <Repeat> , за которым следует <Condition> тест. В приведенном ниже примере бесконечный цикл не будет происходить, так как уменьшение происходит после ключевого $icontinue слова.

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

Использование помеченного продолжения в цикле

Помеченная continue инструкция завершает выполнение итерации и передает управление целевой включающей итерации или switch метку оператора.

В следующем примере самая for внутренняя часть завершается, когда $condition имеет значение True, а итерация продолжается со вторым for циклом.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
            }
        }
    }
}

Использование continue в операторе switch

Оператор без метки continue в пределах switch завершения выполнения текущей switch итерации и передает элемент управления в начало switch элемента для получения следующего входного элемента.

При наличии одного входного элемента continue завершается весь switch оператор. switch Если входные данные являются коллекцией, каждый switch элемент коллекции проверяется. Завершает continue текущую итерацию и switch продолжается со следующим элементом.

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

Использование инструкции continue в операторе trap

Если окончательная инструкция, выполненная в тексте trap инструкции, является continue, перехватаемая ошибка игнорируется автоматически, и выполнение продолжается с инструкцией сразу после той, которая вызвала trap возникновение.

Не используйте продолжение за пределами цикла, переключателя или ловушки

Если continue используется вне конструкции, которая напрямую поддерживает его (циклы, switch, ), trapPowerShell ищет стек вызовов для включающей конструкции. Если не удается найти включающую конструкцию, текущее пространство выполнения будет тихо завершено.

Это означает, что функции и скрипты, которые непреднамеренно используют continue вне включающей конструкции, поддерживающей ее, могут случайно завершить свои вызывающие объекты.

Использование continue внутри конвейера, например ForEach-Object блока скрипта, не только завершает конвейер, tt потенциально завершает весь пространство выполнения.

См. также раздел

about_Break

about_For

about_Comparison_Operators

about_Throw

about_Trap

about_Try_Catch_Finally