有个cmdlet是Get-FileHash可以用来获得文件HASH值。
这个是我能想到的解法,不一定是最优的。
$all = ls -file |get-filehash |sort hash #不想做循环就偷懒了。获得当前目录的文件|获得hash值,按hash排序
$temphash=""; #用于存放上一个文件的hash
$all | #遍历比较是否与上一个文件hash相同
%{
if($temphash -eq $_.hash){
$_.path #如相同显示文件全名 可改为删除
}
$temphash = $_.hash
}
$Hash=New-object System.Collections.Generic.HashSet
用这个数据结构,它是一个无重复的链表,脚本运行时把每个文件的HASH值计算后插入到这个链表,插入操作会根据插入的结果返回布尔值,如果插入失败(返回值为0)直接删除文件就行,这样做可以仅遍历一次文件。
正解,这样可以避免@神经元短路 中对于hash的排序。