通过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