使用Powershell删除重复文件,但指定的文件除外

时间:2016-08-09 20:08:58

标签: powershell

我使用以下代码删除一个文件夹中的重复文件:

ls *.wav -recurse | get-filehash | group -property hash | where { $_.count -gt 1 } | % { $_.group | select -skip 1 } | del

我有两个问题。我想一次只将其限制为一个文件,我需要指定我想保留的文件名。

例如,我有一个名为Recordings的文件夹。列出的前五个文件都具有相同的filehash,但只有一个文件具有已在我的数据库中输入的文件名。

Recordings

如果我可以为del cmdlet使用-Exclude参数但该参数不接受管道输入,那将会很棒。

我还考虑使用上面的代码然后重命名剩余的文件,但代码不限于一个文件。

1 个答案:

答案 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)命令。我修改了结果以将重复数组保存到变量中,然后将其传递给有效的删除命令。