Поделиться через


about_Continue

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

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

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

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

Использование циклов continue in

Оператор без метки continue немедленно возвращает поток программы в начало самого внутреннего цикла, который управляется оператором for, foreach, doили 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> тест. В приведенном ниже примере бесконечный цикл не будет происходить, так как уменьшение $i происходит после 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--
    }
}

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

Оператор с 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 вне цикла, переключателя или ловушки

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

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

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

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