9

カスタム プロパティによるファイル検索に興味があります。たとえば、特定のサイズのすべての JPEG 画像を検索したいとします。何かのように見える

Get-ChildItem -Path C:\ -Filter *.jpg -Recursive | where-object { $_.Dimension -eq '1024x768' }

System.Drawing を使用していると思われます。それはどのように行うことができますか?前もって感謝します

4

2 に答える 2

12

それは実際には非常に簡単で、 System.Drawing についての直感は実際には正しかったです。

Add-Type -Assembly System.Drawing

$input | ForEach-Object { [Drawing.Image]::FromFile($_) }

それをパスのどこかに保存するGet-Image.ps1と、それを使用できます。

別のオプションは、次を に追加すること$profileです。

Add-Type -Assembly System.Drawing

function Get-Image {
    $input | ForEach-Object { [Drawing.Image]::FromFile($_) }
}

これはほとんど同じように機能します。もちろん、必要に応じてドキュメントなどの凝ったものを追加してください。

その後、次のように使用できます。

gci -inc *.jpg -rec | Get-Image | ? { $_.Width -eq 1024 -and $_.Height -eq 768 }

この方法で作成されたオブジェクトは、使用後に破棄する必要があることに注意してください。

もちろん、カスタムDimensionプロパティを追加して、それをフィルタリングすることもできます。

function Get-Image {
    $input |
        ForEach-Object { [Drawing.Image]::FromFile($_) } |
        ForEach-Object {
            $_ | Add-Member -PassThru NoteProperty Dimension ('{0}x{1}' -f $_.Width,$_.Height)
        }
}
于 2010-06-02T13:03:45.023 に答える
3

(ほぼ)ワンライナーとしての代替実装は次のとおりです。

Add-Type -Assembly System.Drawing

Get-ChildItem -Path C:\ -Filter *.jpg -Recursive | ForEach-Object { [System.Drawing.Image]::FromFile($_.FullName) } | Where-Object { $_.Width -eq 1024 -and $_.Height -eq 768 }

このコマンドを複数回実行する必要がある場合は、代わりにJohannesのより完全なソリューションをお勧めします。

于 2010-06-02T13:17:38.153 に答える