我使用以下代码删除一个文件夹中的重复文件:
ls *.wav -recurse | get-filehash | group -property hash | where { $_.count -gt 1 } | % { $_.group | select -skip 1 } | del
我有两个问题。我想一次只将其限制为一个文件,我需要指定我想保留的文件名。
例如,我有一个名为Recordings的文件夹。列出的前五个文件都具有相同的filehash,但只有一个文件具有已在我的数据库中输入的文件名。
如果我可以为del cmdlet使用-Exclude参数但该参数不接受管道输入,那将会很棒。
我还考虑使用上面的代码然后重命名剩余的文件,但代码不限于一个文件。
答案 0 :(得分:0)
这完全取决于你希望它如何工作。例如,如果您知道要提前保留的文件名,则可以这样做:
$fileName = 'file1.txt'
$fileHash = Get-FileHash .\$filename
$duplicates = ls -Recurse | Get-FileHash | Where-Object {$_.Hash -eq $fileHash.Hash -and ($_.Path | Split-Path -Leaf) -ne $fileName }
$duplicates | del
此序列设置文件名,获取该文件的哈希值,然后主命令检查具有相同文件名的相同哈希的其他文件。
注意:首先进行测试以确保在执行del命令之前执行此操作。
更新:看起来Get-FileHash会对正在进行哈希处理的文件进行某种锁定,因此您无法立即转发到del(Remove-Item)命令。我修改了结果以将重复数组保存到变量中,然后将其传递给有效的删除命令。