Sobre Continuar

Descrição breve

Descreve como a continue instrução retorna imediatamente o fluxo do programa para a parte superior de um loop de programa, uma switch instrução ou uma trap instrução.

Descrição longa

A continue instrução fornece uma maneira de sair do bloco de controle atual, mas continuar a execução, em vez de sair completamente. A instrução dá suporte a rótulos. Um rótulo é um nome que você atribui a uma instrução em um script.

Usando continuar em loops

Uma instrução sem rótulo continue retorna imediatamente o fluxo do programa para a parte superior do loop mais interno controlado por uma instrução ou foreachdowhile instrução.for A iteração atual do loop é encerrada e o loop continua com a próxima iteração.

No exemplo a seguir, o fluxo do programa retornará à parte superior do while loop se a $ctr variável for igual a 5. Como resultado, todos os números entre 1 e 10 são exibidos, exceto 5:

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

    Write-Host -Object $ctr
}

Ao usar um for loop, a execução continua na <Repeat> instrução, seguida pelo <Condition> teste. No exemplo abaixo, um loop infinito não ocorrerá porque a decremento ocorre $i após a continue palavra-chave.

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

Usar uma continuação rotulada em um loop

Uma instrução rotulada continue encerra a execução da iteração e transfere o controle para a iteração ou switch rótulo de instrução de destino.

No exemplo a seguir, a parte mais for interna é encerrada quando $condition é True e a iteração continua com o segundo for loop em 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
            }
        }
    }
}

Usando continuar em uma instrução switch

Uma instrução sem rótulo continue dentro de uma switch execução encerra a execução da iteração atual switch e transfere o controle para a parte superior do switch item de entrada a seguir.

Quando há um único item continue de entrada sai da instrução inteira switch . Quando a switch entrada é uma coleção, o switch teste de cada elemento da coleção. A continue iteração atual é encerrada e continua switch com o próximo elemento.

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

Usar continuar em uma instrução trap

Se a instrução final executada no corpo for uma trap instrução continue, o erro preso será silenciosamente ignorado e a execução continuará com a instrução imediatamente após a que causou trap a ocorrência.

Não use continuar fora de um loop, comutador ou armadilha

Quando continue é usado fora de um constructo que dá suporte diretamente a ele (loops, switch, trap), o PowerShell procura a pilha de chamadas para uma construção de entressasso. Se ele não conseguir encontrar uma construção que inclua, o runspace atual será encerrado silenciosamente.

Isso significa que funções e scripts que usam inadvertidamente um continue fora de um constructo que dá suporte a ele podem encerrar inadvertidamente seus chamadores.

O uso continue dentro de um pipeline, como um ForEach-Object bloco de script, não apenas sai do pipeline, o tt potencialmente encerra todo o runspace.

Confira também

about_Break

about_For

about_Comparison_Operators

about_Throw

about_Trap

about_Try_Catch_Finally