PowerShell HelpFile - about_Break
 記事記号:[me1517] 初版:2011/May/10

この文書は、Windows PowerShellのヘルプ機能で表示される内容を再構成したものです。

トピック
    about_Break

簡易説明
    Foreach、For、While、Do、または Switch ステートメントを直ちに終了するために
    使用できるステートメントについて説明します。

詳細説明
    Break ステートメントが Foreach、For、Switch、While ループなどのループ内に出
    現した場合、Break ステートメントはそのループを直ちに終了するように Windows P
    owerShell に指示します。ループしない Switch 構文では、Break は Switch コード 
    ブロックを終了するように Windows PowerShell に指示します。
 
    Break ステートメントには、埋め込みループを終了するためのラベルが含めることが
    できます。ラベルには、スクリプトにある Foreach、For、While などのループ キー
    ワードを指定できます。ラベルが使用されている場合、Break が出現すると、指定さ
    れたループが終了します。Break が出現すると、どのループに Break ステートメン
    トが含まれているにかかわらず、指定されたループが終了します。

    次の例は、Break ステートメントを使用して For ステートメントを終了する方法を
    示しています。

        for($i=1; $i -le 10; $i++)
        {
            Write-Host $i
            break
        }

    この例では、$i 変数が 1 に等しい状態で、Break ステートメントによって For ル
    ープが終了します。For ステートメントは $i が 10 より大きくなるまで True とし
    て評価されますが、Windows PowerShell は、最初に For ループが実行されたときに 
    Break ステートメントに到達します。

    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 ループ
    が終了します。

    その他のループ ステートメントを Break によって終了する方法も、Foreach ルー
    プの場合と同じです。次の例では、DivideByZeroException 例外が Trap ステート
    メントによってトラップされた場合に、Break ステートメントによって While ステ
    ートメントが終了します。

        $i = 3
        while ($true)
        {
            trap [DivideByZeroException]
            {
                Write-Host "divide by zero trapped" break
            }
            1 / $i--
        }

    Break ステートメントには、ラベルを含めることができます。Break キーワードをラ
    ベルと共に使用すると、Windows PowerShell では、現在のループの代わりにラベル
    付けしているループが終了します。ラベルの構文は次のとおりです (この例では、Wh
    ile ループのラベルを示します)。

        :myLabel while () { }

    ラベルはコロンの後に割り当てる名前を指定したものです。ラベルはステートメント
    の最初のトークンであり、直後に While などのループ キーワードを記述する必要が
    あります。
 
    Windows PowerShell では、Foreach、For、While などのループ キーワードのみにラ
    ベルを使用できます。

    Break は、ラベル付けしたループの外に制御を移動します。埋め込みループの場合、
    Break キーワードを単独で使用した場合とは異なる結果になります。ここでは、Whil
    e ステートメントと For ステートメントを使用した例を示します。
 
        :myLabel while ()
        {
            for ($item in $items)
            { 
                if () { break myLabel }
                $item = $x  # For ループ内のステートメント }
        }
        $a = $c # ラベル付けした While ループの後のステートメント

    condition 2 が True と評価された場合、スクリプトの実行はラベル付けしたループ
    の後のステートメントに移されます。この例では、"$a = $c" のステートメントで実
    行が再開されます。

    次の例に示すように、ラベル付けしたループはいくつでも入れ子にできます。

        :red while ()
        {
            :yellow while ()
            {
                while ()
                {
                    if ($a) {break}
                    if ($b) {break red}
                    if ($c) {break yellow}
                }
                # 最も内側のループの後
            }
                # "yellow" ループの後
        }
                # "red" ループの後

    $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" と最初に比較
    します (Regax クラスは、Microsoft .NET Framework の正規表現クラスです)。変数
    の値と Switch ステートメントの最初のテストは一致するため、Switch ステートメン
    トの最初のコード ブロックが実行されます。

    Windows PowerShell が最初の Break ステートメントに到達すると、Switch ステート
    メントは終了します。この例から 4 つの Break ステートメントを取り除いた場合、4 
    つの条件すべてが満たされます。この例では、Break ステートメントを使用して最も
    細かい条件が満たされた場合に結果を表示しています。

関連項目
    about_Comparison_Operators
    about_For
    about_Foreach 
    about_Switch
    about_While
	
記事で解説しているパソコンの環境
 基本ソフト: Windows 7
 キーワード: Windows PowerShell、ヘルプ、HelpFile、about_Break
ご利用数: 1975161
感想・要望・問い合わせは こちら