PowerShell経由のスマート画像検索
-
23-10-2019 - |
質問
カスタムプロパティによるファイル検索に興味があります。たとえば、特定の寸法のすべての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 }
このコマンドを複数回実行する必要がある場合は、お勧めします ヨハネスのより完全な解決策 代わりは。
所属していません StackOverflow