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

执行Top32大文件查询命令遇路径过长错误,已开长路径支持仍无效

解决DFS暂存区计算脚本的长路径错误问题

问题根源

尽管你已通过注册表启用Windows长路径支持,但PowerShell 5.1及以下版本的Get-ChildItem(别名gci)默认不兼容长路径,即使系统层面开启支持,该cmdlet仍受限于传统260字符路径限制。

解决方案

以下是按优先级排序的可行解决办法:

1. 升级到PowerShell 7+

PowerShell 7及以上版本原生支持长路径,无需额外配置,直接运行原脚本即可规避路径过长错误。

2. 改用.NET API枚举文件(适用于PowerShell 5.1)

通过调用.NET的Directory.EnumerateFiles方法绕过Get-ChildItem的限制,修改后的脚本如下:

measure-command {
    $total = New-Object System.Collections.ArrayList
    # 用.NET方法枚举所有文件,支持长路径
    [System.IO.Directory]::EnumerateFiles("F:\Folder\with\966693\items", "*", [System.IO.SearchOption]::AllDirectories) |
    ForEach-Object {
        $fileInfo = New-Object System.IO.FileInfo($_)
        $total.Add($fileInfo.Length) > $null
    }
    # 计算Top32文件总大小(单位:GB)
    ($total | Sort-Object -Descending | Select-Object -First 32 | Measure-Object -Sum).Sum / 1GB
}

注意:此方法需确保LongPathsEnabled设置已生效(设置后需重启系统)。

3. 临时启用PowerShell长路径兼容

在PowerShell 5.1中,执行以下命令后再运行原脚本,部分场景可解决问题:

$env:__COMPAT_LAYER = "LongPathAware"

4. 映射驱动器缩短路径

将长路径文件夹映射为虚拟驱动器,降低路径长度:

New-PSDrive -Name Z -PSProvider FileSystem -Root "F:\Folder\with\966693\items"

随后将脚本中的路径替换为Z:\即可。

额外注意事项

  • 启用LongPathsEnabled后必须重启系统才能生效,若刚完成设置请先重启。
  • 确保脚本运行账号拥有目标文件夹所有子目录的访问权限。

内容的提问来源于stack exchange,提问作者Jonathan Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 03:15:14