カスタム プロパティによるファイル検索に興味があります。たとえば、特定のサイズのすべての JPEG 画像を検索したいとします。何かのように見える
Get-ChildItem -Path C:\ -Filter *.jpg -Recursive | where-object { $_.Dimension -eq '1024x768' }
System.Drawing を使用していると思われます。それはどのように行うことができますか?前もって感謝します
カスタム プロパティによるファイル検索に興味があります。たとえば、特定のサイズのすべての JPEG 画像を検索したいとします。何かのように見える
Get-ChildItem -Path C:\ -Filter *.jpg -Recursive | where-object { $_.Dimension -eq '1024x768' }
System.Drawing を使用していると思われます。それはどのように行うことができますか?前もって感謝します
それは実際には非常に簡単で、 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 }
このコマンドを複数回実行する必要がある場合は、代わりにJohannesのより完全なソリューションをお勧めします。