PowerShell脚本无法排除符号链接子文件夹问题求助
解决PowerShell脚本无法排除符号链接子文件夹的问题
核心问题原因
你之前的过滤逻辑错误地针对了文件的属性,而非符号链接类型的子文件夹。符号链接文件夹的Attributes包含ReparsePoint标记,需要在遍历目录阶段就排除这类目录,才能避免脚本进入其中搜索文件。
修正后的完整脚本
# 目标文件夹路径 $targetDir = "C:\Users\test\Documents\folder" # 1. 先筛选所有非符号链接的子目录(包括根目录) $validDirectories = Get-ChildItem -Path $targetDir -Directory -Recurse | Where-Object { -not ($_.Attributes -band [IO.FileAttributes]::ReparsePoint) } # 2. 在有效目录中获取所有文件 $allFiles = $validDirectories | Get-ChildItem -File # 3. 计算文件哈希,按哈希+文件大小分组(确保重复文件的准确性) $duplicateFiles = $allFiles | Select-Object FullName, Length, @{Name='SHA256哈希'; Expression={(Get-FileHash $_.FullName -Algorithm SHA256).Hash}} | Group-Object -Property 'SHA256哈希', Length | Where-Object { $_.Count -gt 1 } # 4. 整理结果格式 $outputData = $duplicateFiles | ForEach-Object { $groupID = "重复组_$($_.Group[0].'SHA256哈希'.Substring(0,8))" $_.Group | Select-Object @{Name='重复组ID'; Expression={$groupID}}, FullName, Length, 'SHA256哈希' } # 5. 显示结果 $outputData | Format-Table -AutoSize # 6. 导出到CSV文件 $csvPath = Join-Path $targetDir "重复文件检测结果.csv" $outputData | Export-Csv -Path $csvPath -Encoding UTF8 -NoTypeInformation
关键修正点说明
- 使用
-Directory参数单独筛选目录,再通过-band位运算精准判断是否包含ReparsePoint属性(比字符串匹配更可靠) - 先排除符号链接目录,再在有效目录内搜索文件,从根源避免进入符号链接子文件夹
- 按哈希+文件大小分组,避免因哈希碰撞导致的误判(相同大小的文件哈希重复概率极低)
内容的提问来源于stack exchange,提问作者KaKouss Night
相关产品推荐
相关产品推荐

