如何用PowerShell筛选宽度为650的图片并输出文件路径?
解决PowerShell筛选指定宽度图片并输出完整路径的问题
正确解决方案
方案1:修复Get-Image.ps1脚本后使用
- 打开
Get-Image.ps1,将第三行修改为:
$input | ForEach-Object { [Drawing.Image]::FromFile($_.FullName) }
- 执行以下命令,直接输出符合条件的图片完整路径:
Get-ChildItem -Filter *.png -Recurse | .\Get-Image | Where-Object { $_.Width -eq 650 } | Select-Object -ExpandProperty FullName
方案2:直接使用单条命令(无需脚本)
执行以下命令,同时注意释放图片资源避免文件锁定:
Add-Type -Assembly System.Drawing Get-ChildItem -Filter *.png -Recurse | ForEach-Object { $image = [System.Drawing.Image]::FromFile($_.FullName) if ($image.Width -eq 650) { $_.FullName } $image.Dispose() }
原方案错误原因说明
- 方案1报错原因:原
Get-Image.ps1中直接将$_传入FromFile方法,此时$_是FileInfo对象,隐式转换为字符串时仅返回文件名而非完整路径,导致系统找不到文件。修改为$_.FullName即可传递完整路径。 - 方案2无输出原因:原命令中
ForEach-Object返回的是Image对象而非原FileInfo对象,Image对象没有FullName属性,因此添加| ft fullname后无输出。正确做法是在循环内基于原FileInfo对象输出路径,同时处理图片资源释放。
内容的提问来源于stack exchange,提问作者puddingrocks
相关产品推荐
相关产品推荐

