about_Continue
Краткое описание
Описывает, как continue
оператор немедленно возвращает поток программы в начало цикла программы, switch
оператора или trap
оператора.
Подробное описание
Оператор continue
предоставляет способ выхода из текущего блока управления, но продолжить выполнение, а не завершить работу полностью. Инструкция поддерживает метки.
Метка — это имя, назначаемое инструкции в скрипте.
Использование продолжения в циклах
Оператор без метки 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
}
}
}
}
Использование инструкции 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
Использование инструкции "Продолжить" в инструкции ловушки
Если последняя инструкция, выполненная в тексте trap
инструкции, имеет continue
значение , обнаруженная ошибка автоматически игнорируется, и выполнение продолжается с инструкцией сразу после той, которая вызвала trap
возникновение.
Не используйте продолжение за пределами цикла, коммутатора или ловушки
Если continue
используется вне конструкции, которая напрямую поддерживает его (циклы, switch
, ), trap
PowerShell ищет стек вызовов для заключающей конструкции. Если он не может найти заключенную конструкцию, текущее пространство выполнения будет тихо завершено.
Это означает, что функции и сценарии, которые непреднамеренно используют continue
вне заключающей конструкции, поддерживающей ее, могут случайно завершить вызовы.
Используя continue
внутри конвейера ForEach-Object
, например блок скрипта, не только выход из конвейера, он потенциально завершает весь пространство выполнения.
См. также
PowerShell