about_Continue
Kort beskrivning
Beskriver hur -instruktionen continue
omedelbart returnerar programflödet överst i en programloop, en switch
-instruktion eller en trap
-instruktion.
Lång beskrivning
Instruktionen continue
ger ett sätt att avsluta det aktuella kontrollblocket men fortsätta körningen i stället för att avsluta helt. -instruktionen stöder etiketter.
En etikett är ett namn som du tilldelar till en -instruktion i ett skript.
Använda fortsätt i loopar
En omärkt continue
instruktion returnerar omedelbart programflödet överst i den innersta loopen som styrs av en for
- , foreach
- do
eller while
-instruktion. Den aktuella iterationen av loopen avslutas och loopen fortsätter med nästa iteration.
I följande exempel återgår programflödet till toppen av loopen while
om variabeln $ctr
är lika med 5. Därför visas alla tal mellan 1 och 10 förutom 5:
while ($ctr -lt 10)
{
$ctr += 1
if ($ctr -eq 5)
{
continue
}
Write-Host -Object $ctr
}
När du använder en for
loop fortsätter körningen vid -instruktionen <Repeat>
, följt av <Condition>
testet. I exemplet nedan uppstår ingen oändlig loop eftersom minskning av $i
inträffar efter nyckelordet 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--
}
}
Använda en etiketterad fortsätt i en loop
En märkt continue
instruktion avslutar körningen av iterationen och överför kontrollen till den riktade iterationen eller switch
instruktionsetiketten.
I följande exempel avslutas den innersta for
när $condition
är True och iterationen fortsätter med den andra for
loopen vid 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
}
}
}
}
Använda continue i en switch-instruktion
En omärkt continue
instruktion i en switch
avslutar körningen av den aktuella switch
iterationen och överför kontrollen till överst i switch
för att hämta nästa indataobjekt.
När det finns ett enda indataobjekt continue
avslutas hela switch
-instruktionen.
När indata switch
är en samling switch
testar varje element i samlingen. continue
avslutar den aktuella iterationen switch
och fortsätter med nästa element.
switch (1,2,3) {
2 { continue } # moves on to the next element, 3
default { $_ }
}
1
3
Använda continue i en trap-instruktion
Om den slutliga instruktionen som körs i brödtexten en trap
-instruktion är continue
ignoreras det fångade felet tyst och körningen fortsätter med -instruktionen omedelbart efter den som orsakades trap
.
Använd inte fortsätt utanför en loop, växel eller trap
När continue
används utanför en konstruktion som har direkt stöd för den (loopar, switch
, trap
) letar PowerShell upp anropsstacken för en omslutande konstruktion. Om det inte går att hitta en omslutande konstruktion avslutas det aktuella körningsutrymmet tyst.
Det innebär att funktioner och skript som oavsiktligt använder en continue
utanför en omslutande konstruktion som stöder den oavsiktligt kan avsluta sina anropare.
Om du använder continue
inuti en pipeline, till exempel ett ForEach-Object
skriptblock, avslutas inte bara pipelinen, utan kan potentiellt avsluta hela körningsutrymmet.