about_Continue

Descripción breve

Describe cómo la continue instrucción devuelve inmediatamente el flujo del programa a la parte superior de un bucle de programa, una switch instrucción o una trap instrucción .

Descripción larga

La continue instrucción proporciona una manera de salir del bloque de control actual, pero continuar la ejecución, en lugar de salir por completo. La instrucción admite etiquetas. Una etiqueta es un nombre que se asigna a una instrucción en un script.

Uso de continue in loops

Una instrucción sin etiqueta continue devuelve inmediatamente el flujo de programa a la parte superior del bucle más interno controlado por una forinstrucción , foreach, doo while . La iteración actual del bucle finaliza y el bucle continúa con la siguiente iteración.

En el ejemplo siguiente, el flujo de programa vuelve a la parte superior del while bucle si la $ctr variable es igual a 5. Como resultado, se muestran todos los números entre 1 y 10, excepto 5:

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

    Write-Host -Object $ctr
}

Cuando se usa un for bucle, la ejecución continúa en la <Repeat> instrucción , seguida de la <Condition> prueba. En el ejemplo siguiente, no se producirá un bucle infinito porque el decremento de se produce después de $i la continue palabra clave .

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

Uso de una continuación etiquetada en un bucle

Una instrucción etiquetada continue finaliza la ejecución de la iteración y transfiere el control al rótulo de iteración o switch instrucción de destino.

En el ejemplo siguiente, el extremo más for interno finaliza cuando $condition es True y la iteración continúa con el segundo for bucle en 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
            }
        }
    }
}

Uso de continue en una instrucción switch

Una instrucción sin etiquetar continue dentro de una switch finaliza la ejecución de la iteración actual switch y transfiere el control a la parte superior de para obtener el siguiente elemento de switch entrada.

Cuando hay un solo elemento continue de entrada sale de toda switch la instrucción. Cuando la switch entrada es una colección, comprueba switch cada elemento de la colección. continue Sale de la iteración actual y switch continúa con el elemento siguiente.

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

Uso de continue en una instrucción trap

Si la instrucción final ejecutada en el cuerpo de una trap instrucción es continue, el error atrapado se omite silenciosamente y la ejecución continúa con la instrucción inmediatamente después de la que se trap produjo.

No use continuar fuera de un bucle, conmutador o captura

Cuando continue se usa fuera de una construcción que lo admite directamente (bucles, switch, trap), PowerShell busca la pila de llamadas para una construcción envolvente. Si no encuentra una construcción envolvente, el espacio de ejecución actual finaliza silenciosamente.

Esto significa que las funciones y los scripts que usan accidentalmente un continue elemento fuera de una construcción envolvente que lo admite, pueden finalizar accidentalmente sus autores de llamada.

El uso continue dentro de una canalización, como un ForEach-Object bloque de script, no solo sale de la canalización, lo que podría terminar todo el espacio de ejecución.

Consulte también