我对通过自定义属性进行文件搜索感兴趣。例如,我想找到具有某些维度的所有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