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
, ), trap
PowerShell ищет стек вызовов для включающей конструкции. Если не удается найти включающую конструкцию, текущее пространство выполнения будет тихо завершено.
Это означает, что функции и скрипты, которые непреднамеренно используют continue
за пределами включающей конструкции, поддерживающей ее, могут непреднамеренно завершить работу вызывающих объектов.
Использование continue
внутри конвейера, например блока скрипта ForEach-Object
, не только завершает конвейер, но и может привести к завершению всего пространства выполнения.