【发布时间】:2022-01-23 23:28:01
【问题描述】:
我很确定答案是否定的,但它一直困扰着我。
我的任务是递归地在某个位置查找重复文件。我可以毫无问题地做到这一点。但是看到一些文件有 3 或 4 个重复文件,我无法回答“有多少文件是原件?”的问题。无需借助 excel 编辑。
代码:
gci -path $path -recurse -file -erroraction silentlycontinue|
Select @{l='Original Filename';e={$_.PSChildName}}, @{l='Compare Filename';e={$_.BaseName.replace('_','*').replace(' ','*').replace('-','*')}}, @{l="Path";e={$_.PSParentPath.Substring(38,$_.PSParentPath.Length-38)}}, @{l="Link";e={$_.FullName}}|
group -Property 'Compare Filename'|
Where {$_.count -ge 2}|
%{$_.group}|
Export-Csv -Path $path2 -NoTypeInformation
路径变量无关紧要,所以我不会列出它们。
编辑: 我已经测试了提供的两种解决方案,并阅读了 mklement0 提供的奇妙解释。 最后,至少在我正在使用的 ~4k 文件中,两种分辨率的速度是相当的。有关“测量命令”输出,请参见下文。
【问题讨论】:
-
请使用
Group-Object向我们展示您的源代码。使用命令help Group-Object -Full并查看Example 1。 -
excel部分只是为了提供背景
-
这有帮助吗? stackoverflow.com/a/70380933/15339544此方法使用文件哈希而不是文件名(速度较慢,但无论名称如何都会找到实际的重复项)。
-
之前的评论无效。试试这个:
Group -Property 'Compare Filename' | Measure | Select -ExpandProperty Count -
如果只有一个组,
Group-Objectcmdlet 会给出一个单独的GroupInfo对象...如果有多个,则给出GroupInfo对象的集合。所以...将结果强制放入一个数组并获取.Count值。像这样... >>>@(@($(1..20)) | Group-Object).Count20。 [咧嘴]
标签: powershell csv group-by numbers