2

一致するものが見つかったら、次の powershell 関数から戻りたいと思います (より完全なコード サンプルについては、コードレビューの質問を参照してください)。

Function Find-Property($fileName, $PropertyName)
{
    $shellfolder = Create-ShellFolder $fileName
    0..287 | Foreach-Object {
        if($PropertyName -eq $shellfolder.GetDetailsOf($null, $_)){ return $_ }
    }
}

このコードは、if 条件のスコープから戻っているように見えますが、これはあまり役に立ちません。

これどうやってするの?どこかにラベル付きの休憩が必要ですか?

4

2 に答える 2

4

returnステートメントを使用して関数を終了する場合は、コマンドレットforeachの代わりにキーワードを使用できます。ForEach-Objectここにデモがあります:

function Foo {
    foreach ($number in (0..287)) {
        $number # Just show our current iteration.
        if ($number -eq 50) {
            return $number
        }
    }
}
于 2012-07-20T22:54:31.330 に答える
3

ラベルは必要ありません。

function Find-Property($Filename, $PropertyName)
{
    $shellfolder = Create-ShellFolder $fileName
    0..287 | Where {$PropertyName -eq $shellfolder.GetDetailsOf($null, $_)} | 
             Foreach {$_;break}
}

別のオプションは、元の関数を微調整することです。

function Find-Property($fileName, $PropertyName)
{
    $shellfolder = Create-ShellFolder $fileName
    0..287 | Foreach-Object {
        if($PropertyName -eq $shellfolder.GetDetailsOf($null, $_)) {$_; break}
    }
}
于 2012-07-20T21:42:33.267 に答える