about_Break
適用対象: Windows PowerShell 2.0, Windows PowerShell 3.0
概要をここに挿入してください。
トピック
about_Break
概要
Foreach、For、While、Do、または Switch をすぐに終了するために使用可能なステートメントについて説明します。
詳細説明
Foreach、For、Switch、または While ループなどのループ中に Break ステートメントが現れると、その Break ステートメントによって、Windows PowerShell はすぐにループを終了します。ループしないスイッチ コンストラクトでは、Break によって Windows PowerShell は Switch コード ブロックを終了します。
Break ステートメントには、埋め込みループを終了できるラベルを含めることができます。ラベルは、スクリプト内の Foreach、For、または While などの任意のループ キーワードを指定できます。ラベルを使用すると、Break は指定されたループを終了します。Break は Break ステートメントがどのループに含まれるかに関係なく、指定されたループを終了します。
次の例は、Break ステートメントを使用して For ステートメントを終了する方法を示します。
for($i=1; $i -le 10; $i++)
{
Write-Host $i
break
}
この例では、$i 変数が 1 と等しい場合に、Break ステートメントが For ループを終了します。$i が 10 を超えるまで For ステートメントが True と評価される場合でも、Windows PowerShell は、For ループが初めて実行されるときブレーク ステートメントに到達します。
内部の条件を満たす必要のあるループ内で Break ステートメントを使用する方が一般的です。Foreach ステートメントの次の例を考えてみます。
$i=0
$varB = 10,20,30,40
foreach ($val in $varB)
{
$i++
if ($val -eq 30)
{
break
}
}
Write-Host "30 was found in array position $i"
この例で、Foreach ステートメントは、$varB 配列を反復処理します。コード ブロックが実行されるたびに $i 変数は 1 ずつ増分されます。最初の 2 回のループ実行では If ステートメントが False と評価されます。3 回目のループを実行すると、$i は 3 に等しく、$val 変数 は 30 に等しくなります。この時点で Break ステートメントが実行され、Foreach ループが終了します。
Foreach ループから抜け出すのと同じ方法で、その他のループのステートメントが中断されます。次の例では、Trap ステートメントを使用して DivideByZeroException 例外がトラップされると、Break ステートメントは While ステートメントを終了します。
$i = 3
while ($true)
{
trap [DivideByZeroException]
{
Write-Host "divide by zero trapped"
break
}
1 / $i--
}
Break ステートメントにはラベルを含めることができます。Break キーワードをラベルとともに使用する場合、Windows PowerShell は現在のループではなく、ラベルが付けられたループを終了します。ラベルの構文は次のとおりです (この例は While ループ内のラベルを示します)。
:myLabel while (<condition>) { <statement list>}
ラベルは、コロンの後に名前を指定します。ラベルは、ステートメント中の最初のトークンである必要があり、While などのループのキーワードを後に続ける必要があります。
Windows PowerShell では、Foreach、For、および While といったループのキーワードのみがラベルを持つことができます。
Break はラベル付きのループの実行を中断します。埋め込みループの場合、Break キーワードが単独で使用される場合とは異なる結果になります。この図の例には、For ステートメントを伴う While ステートメントが示されています。
:myLabel while (<condition 1>)
{
for ($item in $items)
{
if (<condition 2>) { break myLabel }
$item = $x # A statement inside the For-loop
}
}
$a = $c # A statement after the labeled While-loop
条件 2 が True に評価されると、スクリプトの実行はラベル付きループの後のステートメントにスキップします。この例では、ステートメント「$a = $c」で実行が再び開始されます。
次の図の例で示すように、多くのラベル付きループを入れ子にできます。
:red while (<condition1>)
{
:yellow while (<condition2>)
{
while (<condition3>)
{
if ($a) {break}
if ($b) {break red}
if ($c) {break yellow}
}
# After innermost loop
}
# After \"yellow\" loop
}
# After \"red\" loop
$b 変数が True に評価されると、"red"というラベルが付いたループの後で、スクリプトの実行が再開されます。$c 変数が True に評価されると、"yellow" というラベルが付いたループの後で、スクリプト制御の実行が再開されます。
$a 変数が True に評価されると、最も内側のループの後で実行が再開されます。ラベルは必要ありません。
Windows PowerShell では、ラベルが実行を再開する範囲の制限はありません。ラベルはスクリプトおよび関数呼び出しの境界を越えて制御を渡すことも可能です。
Break キーワードは Switch コンストラクトから出るために使用されます。たとえば、次の Switch ステートメントは、Break ステートメントを使用して特定の条件をテストします。
$var = "word2"
switch -regex ($var)
{
"word2"
{
Write-Host "Exact" $_
break
}
"word.*"
{
Write-Host "Match on the prefix" $_
break
}
"w.*"
{
Write-Host "Match on at least the first letter" $_
break
}
default
{
Write-Host "No match" $_
break
}
}
この例では、$var 変数が作成され、「word2」という文字列値に初期化されます。Switch ステートメントは、Regex クラスを使用して、変数値をまず「word2」という用語と照合します。(Regex クラスは正規表現の Microsoft .NET Framework クラスです。)変数値と Switch ステートメントの最初のテストが一致するので、Switch ステートメント内の最初のコード ブロックが実行されます。
Windows PowerShell が最初の Break ステートメントに達すると、Switch ステートメントは終了します。次の 4 つの Break ステートメントが例から削除された場合、4 つの条件がすべて満たされます。この例は、ブレーク ステートメントを使用して、特定の条件が満たされる場合の結果を表示します。
関連項目
about_Comparison_Operato
about_Continue
about_For
about_Foreach
about_Switch
about_Throw
about_Trap
about_Try_Catch_Finally
about_While