如何用PowerShell统计并排序文件中焦距数据的出现次数?
PowerShell统计焦距出现次数的最简实现
首先修正你原代码的问题:当前循环里每次都会用新值覆盖$data,导致最后只保留最后一个文件的焦距数据。需要先把所有文件的焦距收集到数组里,再做统计。
最简实现代码如下:
# 收集所有焦距数据 $focalLengths = foreach ($file in $files) { Get-FocalLength $file } # 分组统计次数,按次数降序排序后输出指定格式 $focalLengths | Group-Object | Sort-Object Count -Descending | ForEach-Object { "$($_.Name) : $($_.Count)" }
代码说明:
- 用
foreach循环收集所有Get-FocalLength的返回值到数组$focalLengths中,避免数据被覆盖。 Group-Object会自动按相同值分组,每个分组对象包含Name(分组的焦距值)和Count(出现次数)。Sort-Object Count -Descending按出现次数从多到少排序;如果需要按焦距数值排序,可以改成Sort-Object { [int]$_.Name.Split(' ')[0] }。- 最后通过
ForEach-Object格式化输出成你需要的值 : 次数格式。
如果想更简洁,甚至可以把收集和统计合并成一行:
$files | ForEach-Object { Get-FocalLength $_ } | Group-Object | Sort-Object Count -Descending | ForEach-Object { "$($_.Name) : $($_.Count)" }
内容的提问来源于stack exchange,提问作者Kawaii-Hachii
相关产品推荐
相关产品推荐

