You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本统计重复文件大小报错排查求助

问题排查与修正方案

报错原因分析

  • 第20行的($DuplicateFile.Path).Length是获取路径字符串的长度(比如示例里的140),而非文件的实际大小。你把这个数值传给Get-ChildItem,它自然会把140当成路径去查找,导致"找不到路径"的错误。
  • $size变量未初始化,默认是$null,累加后结果异常,最后输出0MB。

修正后的脚本

# 指定要扫描的目录
$FolderPath = "C:\Users\Ben\Music\Apple Music\Media\Music\"
# 初始化总删除大小为0字节
$totalDeletedSize = 0

# 获取目录下所有文件(递归)
$Files = Get-ChildItem -Path $FolderPath -Recurse -File

# 按文件哈希分组,筛选出重复组(数量>1)
$Files | Get-FileHash | Group-Object -Property Hash | Where-Object { $_.Count -gt 1 } | ForEach-Object {
    # 遍历每组重复文件
    foreach ($DuplicateFile in $_.Group) {
        # 跳过每组的第一个文件(保留一份)
        if ($DuplicateFile -ne $_.Group[0]) {
            Write-Host "待删除: $($DuplicateFile.Path)"
            # 获取当前重复文件的实际大小(字节)
            $fileSize = (Get-Item -Path $DuplicateFile.Path).Length
            # 累加到总大小
            $totalDeletedSize += $fileSize
            # 解除注释即可执行删除操作
            # Remove-Item -Path $DuplicateFile.Path -Force
        }
    }
}

# 根据总大小自动转换单位并输出
if ($totalDeletedSize -ge 1GB) {
    $formattedSize = "{0:N2}GB" -f ($totalDeletedSize / 1GB)
} elseif ($totalDeletedSize -ge 1MB) {
    $formattedSize = "{0:N2}MB" -f ($totalDeletedSize / 1MB)
} else {
    $formattedSize = "{0:N2}KB" -f ($totalDeletedSize / 1KB)
}

Write-Host "待删除重复文件总大小: $formattedSize"

关键修改说明

  • 修复文件大小获取逻辑:用(Get-Item $DuplicateFile.Path).Length直接获取文件的实际字节大小,不再错误读取路径字符串长度。
  • 初始化总大小变量:提前将$totalDeletedSize设为0,避免累加时出现$null导致的计算异常。
  • 新增智能单位转换:根据总大小自动选择GB/MB/KB单位,保留两位小数,输出更直观。
  • 优化变量命名:将模糊的$size改为$totalDeletedSize,提升代码可读性。

内容的提问来源于stack exchange,提问作者Benjamin Rich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:52:07