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 for
instrucción , foreach
, do
o 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.