PowerShell需求:共享文件夹当日重复文件检测(非递归)
解决方案:筛选当日新文件中的重复大小文件
你已经有了获取当日文件的基础逻辑,我帮你完善代码,实现按文件大小筛选重复项并告警的功能。核心思路是按文件大小分组,找出同一大小下存在多个文件的组,这些就是需要告警的疑似重复文件。
完整PowerShell脚本
# 目标文件夹路径 $targetPath = "E:\Script\test" # 获取路径下1天内创建的文件,包含文件名、大小(KB)、最后修改时间和文件哈希(可选增强) $recentFiles = Get-ChildItem -Path $targetPath -File | Where-Object { $_.CreationTime -gt (Get-Date).AddDays(-1) } | Select-Object -Property Name, @{Name='SizeInKb'; Expression={[math]::Round($_.Length / 1KB, 2)}}, LastWriteTime, @{Name='FileHash'; Expression={(Get-FileHash -Path $_.FullName -Algorithm SHA256).Hash}} # 按文件大小分组,筛选出包含多个文件的组(即大小重复) $duplicateSizeGroups = $recentFiles | Group-Object -Property SizeInKb | Where-Object {$_.Count -gt 1} # 输出告警或确认信息 if ($duplicateSizeGroups) { Write-Host "⚠️ 告警:发现当日导入的重复大小文件!" -ForegroundColor Red foreach ($group in $duplicateSizeGroups) { Write-Host "`n📌 文件大小:$($group.Name) KB,涉及文件:" -ForegroundColor Yellow $group.Group | ForEach-Object { Write-Host " - 文件名:$($_.Name) | 最后修改时间:$($_.LastWriteTime.ToString('yyyy-MM-dd HH:mm:ss')) | 文件哈希:$($_.FileHash)" } } } else { Write-Host "✅ 当日导入的文件中无重复大小的文件" -ForegroundColor Green }
关键细节说明
-File参数:确保只处理文件,排除文件夹(默认不递归,符合你无需递归检查的需求)- SizeInKb 格式化:用
[math]::Round保留两位小数,避免因浮点计算的微小差异导致分组错误 - 文件哈希(可选):添加SHA256哈希是为了进一步验证大小相同的文件是否真的内容重复,如果不需要这层验证,可以直接删除
FileHash对应的属性 - 时间判断:当前用
CreationTime判断是否为当日文件,如果你的场景中应该用LastWriteTime(比如文件是复制过来的,创建时间不是当日),直接替换$_.CreationTime为$_.LastWriteTime即可 - 告警方式:示例用控制台输出颜色提示,你可以根据需求改成发送邮件、写入日志文件等更正式的告警方式
内容的提问来源于stack exchange,提问作者Teja554
相关产品推荐
相关产品推荐

