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

PowerShell无法显示重复文件大小问题求助

问题原因

你遇到的Length列为空的问题,核心原因是**Get-FileHash命令会将输入的文件对象转换为仅包含Hash、Algorithm、Path属性的FileHash类型对象**,原始文件对象的Length属性在这个转换过程中丢失了,所以后续再选择Length时自然没有数据。

解决方法

只需要在获取文件哈希的同时,保留原始文件对象的Length属性即可,以下是两种可行的修改方案:

方案一:通过自定义对象合并属性

这种方法直观易懂,手动将原始文件的Length、Path与哈希结果结合:

$srcDir = "C:\Users\test\Documents\folder"
Get-ChildItem -Path $srcDir -File -Recurse | 
    Group-Object -Property Length | 
    Where-Object { $_.Count -gt 1 } | 
    Select-Object -ExpandProperty Group | 
    ForEach-Object {
        $fileHash = $_ | Get-FileHash
        [PSCustomObject]@{
            Path   = $_.FullName
            Length = $_.Length
            Hash   = $fileHash.Hash
        }
    } | 
    Group-Object -Property Hash | 
    Where-Object { $_.Count -gt 1 } | 
    ForEach-Object { $_.Group | Select-Object Path, Length }

方案二:使用计算属性保留原始属性

通过Select-Object的计算属性嵌入哈希值,同时保留原始文件的Length:

$srcDir = "C:\Users\test\Documents\folder"
Get-ChildItem -Path $srcDir -File -Recurse | 
    Group-Object Length | Where-Object Count -gt 1 | 
    Select-Object -ExpandProperty Group | 
    Select-Object FullName, Length, @{Name='Hash'; Expression={ (Get-FileHash $_.FullName).Hash }} |
    Group-Object Hash | Where-Object Count -gt 1 |
    ForEach-Object { $_.Group | Select-Object @{Name='Path'; Expression={$_.FullName}}, Length }
关键说明

两种方案的核心逻辑一致:在Get-FileHash处理前/处理时,将原始文件的Length属性保留下来,避免因对象转换导致属性丢失。执行修改后的脚本,就能同时显示重复文件的路径和大小了。

内容的提问来源于stack exchange,提问作者KaKouss Night

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:38:16