Share via


about_Continue

Description courte

Décrit comment l’instruction continue retourne immédiatement le flux de programme en haut d’une boucle de programme, d’une switch instruction ou d’une trap instruction.

Description longue

L’instruction continue fournit un moyen de quitter le bloc de contrôle actuel, mais de poursuivre l’exécution, plutôt que de quitter complètement. L’instruction prend en charge les étiquettes. Une étiquette est un nom que vous affectez à une instruction dans un script.

Utilisation de boucles continue in

Une instruction sans étiquette continue retourne immédiatement le flux de programme en haut de la boucle la plus interne contrôlée par une forinstruction , foreach, doou while . L’itération actuelle de la boucle est terminée et la boucle continue avec l’itération suivante.

Dans l’exemple suivant, le flux de programme retourne en haut de la while boucle si la $ctr variable est égale à 5. Par conséquent, tous les nombres compris entre 1 et 10 sont affichés à l’exception de 5 :

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

    Write-Host -Object $ctr
}

Lors de l’utilisation d’une for boucle, l’exécution se poursuit au niveau de l’instruction <Repeat> , suivie du <Condition> test. Dans l’exemple ci-dessous, une boucle infinie ne se produit pas, car la décrémentation de $i se produit après la continue mot clé.

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

Utilisation d’une continue étiquetée dans une boucle

Une instruction étiquetée continue met fin à l’exécution de l’itération et transfère le contrôle à l’itération englobante ou switch à l’étiquette d’instruction ciblée.

Dans l’exemple suivant, l’extrémité la plus for interne se termine lorsque $condition a la valeur True et que l’itération se poursuit avec la deuxième for boucle à 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
            }
        }
    }
}

Utilisation de continuer dans une instruction switch

Une instruction sans étiquette continue dans un switch met fin à l’exécution de l’itération actuelle switch et transfère le contrôle vers le haut de pour switch obtenir l’élément d’entrée suivant.

Lorsqu’un seul élément continue d’entrée quitte l’instruction entière switch . Lorsque l’entrée switch est une collection, teste switch chaque élément de la collection. le continue quitte l’itération actuelle et le switch continue avec l’élément suivant.

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

Utilisation de continuer dans une instruction d’interruption

Si l’instruction finale exécutée dans le corps d’une trap instruction est continue, l’erreur interceptée est ignorée silencieusement et l’exécution se poursuit avec l’instruction immédiatement après celle qui a provoqué trap l’exécution.

Ne pas utiliser continuer en dehors d’une boucle, d’un commutateur ou d’une interruption

Quand continue est utilisé en dehors d’une construction qui la prend directement en charge (boucles, switch, trap), PowerShell recherche une construction englobante dans la pile des appels . S’il ne trouve pas de construction englobante, l’espace d’exécution actuel se termine silencieusement.

Cela signifie que les fonctions et les scripts qui utilisent par inadvertance une continue construction englobante qui la prend en charge peuvent arrêter par inadvertance leurs appelants.

L’utilisation continue de l’intérieur d’un pipeline, comme un ForEach-Object bloc de script, quitte non seulement le pipeline, mais elle peut potentiellement terminer l’intégralité de l’espace d’exécution.

Voir aussi