Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 通过Powershell进行智能图像搜索_Image_Powershell_File Search - Fatal编程技术网

Image 通过Powershell进行智能图像搜索

Image 通过Powershell进行智能图像搜索,image,powershell,file-search,Image,Powershell,File Search,我对按自定义属性搜索文件感兴趣。例如,我想找到所有具有特定尺寸的JPEG图像。看起来像 Get-ChildItem -Path C:\ -Filter *.jpg -Recursive | where-object { $_.Dimension -eq '1024x768' } 我怀疑这是关于使用System.Drawing的。如何做到这一点? 提前感谢这其实很容易做到,而且你对系统的直觉也是如此。事实上,这幅画是正确的: Add-Type -Assembly System.Drawing

我对按自定义属性搜索文件感兴趣。例如,我想找到所有具有特定尺寸的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($_) }
将其保存为路径中的某个位置,然后您就可以使用它了

另一个选项是将以下内容添加到您的
$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 }
请注意,在使用这些对象后,应以这种方式处置这些对象

当然,您可以添加自定义
维度
属性,以便进行筛选:

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 }

如果您需要多次运行此命令,我建议您改为。

您会在回答中注意到,图像应该在任务完成后处理吗?只是为了教育其他编剧。处置方法经常被忽略…@stej:Eep,好的。除了将
%{$\u.Dispose()}
附加到管道末尾之外,有没有其他方法可以正确或自动执行此操作?我认为没有比按照您的建议手动执行更好的方法了。或者等到豪华会议结束。然而,我通常在登录后打开Posh控制台,在注销前关闭它,所以这并不理想。Try/Finally也会有帮助,但这是开销。我认为一张便条就足够了,剩下的就交给读者吧;)