我有一项任务是检查当天是否在共享位置文件夹中导入了新文件,并提醒是否有任何重复文件并且不需要递归检查。
下面的代码显示大小为 1 天的所有文件详细信息但是我只需要大小相同的文件,因为我无法使用名称比较它们。
$Files = Get-ChildItem -Path E:\Script\test |
Where-Object {$_.CreationTime -gt (Get-Date).AddDays(-1)}
$Files | Select-Object -Property Name, hash, LastWriteTime, @{N='SizeInKb';E={[double]('{0:N2}' -f ($_.Length/1kb))}}
Run Code Online (Sandbox Code Playgroud)
Has*_*own 10
我不喜欢这里写的类似 DOS 的大脚本答案,但后来找到了一个惯用的教程。
从要查找重复项的文件夹中,只需运行这组简单的管道
Get-ChildItem -Recurse -File |
Group-Object Length |
Where-Object { $_.Count -gt 1 } |
select -ExpandProperty group |
foreach {Get-FileHash -LiteralPath $_.FullName} |
group -Property hash |
where { $_.count -gt 1 } |
select -ExpandProperty group
Run Code Online (Sandbox Code Playgroud)
这将显示与其他文件匹配的所有文件及其哈希值。
每行执行以下操作:
-Path $directory否则使用)-Recurse)添加 | %{ $_.path }仅显示路径而不是散列。
添加 | %{ $_.path -replace "$([regex]::escape($(pwd)))",'' }以仅显示当前目录的相对路径(在递归中很有用)。
特别是对于提问者,不要忘记在| Where-Object {$_.CreationTime -gt (Get-Date).AddDays(-1)}之后重击,gci这样你就不会比较你不想考虑的文件,如果你有很多巧合的相同长度的文件,这可能会非常耗时那个共享文件夹。
最后,如果你像我一样,只是想根据名字找到欺骗者,因为谷歌可能也会带你到这里:
gci -Recurse -file | Group-Object name | Where-Object { $_.Count -gt 1 } | select -ExpandProperty group | %{ $_.fullname }
pos*_*ote -1
由于您确定文件内容重复。更谨慎的做法是仅对文件进行哈希处理并比较哈希值。
名字,尺寸。对于定义的用例来说,时间戳不是一个谨慎的属性。因为哈希会告诉您文件是否具有相同的内容。
查看这些讨论
需要一种方法来检查两个文件是否相同?计算文件的哈希值。这是一种方法: https: //blogs.msdn.microsoft.com/powershell/2006/04/25/duplicate-files
重复文件查找器和删除器
现在,您一直在等待的时刻......全 PowerShell 文件重复查找器和删除器!现在您可以清理所有图片、音乐文件和视频的副本。该脚本打开一个文件对话框来选择目标文件夹,递归扫描每个文件是否有重复项
https://gallery.technet.microsoft.com/scriptcenter/Duplicate-File-Finder-and-78f40ae9
| 归档时间: |
|
| 查看次数: |
8843 次 |
| 最近记录: |