質問

カスタムプロパティによるファイル検索に興味があります。たとえば、特定の寸法のすべてのJPEGイメージを見つけたいと思っています。何かがどのように見えますか

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

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)
        }
}

他のヒント

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

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 }

このコマンドを複数回実行する必要がある場合は、お勧めします ヨハネスのより完全な解決策 代わりは。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top