Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Краткое описание
Описывает, как оператор 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' в цикле
Оператор с меткой continue завершает выполнение итерации и передает управление на целевую окружающую итерацию или на метку инструкции switch.
В следующем примере самый внутренний for завершается, когда $conditionTrue, и итерация продолжается со вторым циклом 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 внутри конвейера ForEach-Object , например скриптблока, не только завершает конвейер, он потенциально завершает весь пространство выполнения.
См. также
PowerShell