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

Windows 7下PowerShell路径过长报错,添加\?\无效求解决方案

解决Windows 7 PowerShell路径过长报错的方案

我明白你在Windows 7的PowerShell脚本里遇到了"The specified path, file name, or both are too long"的报错,尝试加了\\?\前缀还是没解决的困扰。这个问题在Windows 7里确实比较常见,因为PowerShell的原生cmdlet对长路径的支持有限,咱们试试下面这几个靠谱的方案:

方案一:用Robocopy替代Get-ChildItem(推荐,无需额外配置)

Robocopy是Windows自带的命令行工具,原生支持超长路径,完全能绕过这个限制。你可以用它来遍历文件并计算总大小,代码示例如下:

# 目标文件夹路径
$targetFolder = $i.FullName

# 用Robocopy列出所有文件(仅列出不复制),捕获输出结果
$robocopyResult = robocopy $targetFolder NULL /L /S /NJH /NJS /BYTES /FP

# 提取每个文件的字节大小并求和
$totalSize = ($robocopyResult | Where-Object { $_ -match '^\s*(\d+)\s+.*' } | ForEach-Object { [long]$matches[1] } | Measure-Object -Sum).Sum

# 输出总大小(单位:字节)
Write-Host "总大小:$totalSize 字节"

参数说明:

  • /L:仅列出文件,不执行复制操作
  • /S:递归遍历子目录(不含空目录,要包含空目录用/E)
  • /NJH /NJS:去掉Robocopy的头部信息和总结信息,只保留文件列表
  • /BYTES:显示文件的字节大小
  • /FP:显示完整文件路径

方案二:启用系统长路径支持+使用.NET方法遍历

这个方案需要先给Windows 7打补丁并修改注册表,然后用.NET的API来替代Get-ChildItem:

步骤1:安装必要补丁

确保你的Windows 7安装了KB2667602补丁(这个补丁是Windows 7支持长路径的基础,可通过微软官方渠道下载)。

步骤2:修改注册表启用长路径

  1. 按下Win+R,输入regedit打开注册表编辑器
  2. 定位到路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
  3. 右键空白处,新建DWORD(32位)值,命名为LongPathsEnabled,设置值为1
  4. 重启电脑生效

步骤3:用.NET方法编写脚本

注册表生效后,使用.NET的System.IO.Directory类来遍历文件,代码示例:

$totalSize = 0
$targetFolder = $i.FullName

# 递归遍历所有文件,支持长路径
foreach ($filePath in [System.IO.Directory]::EnumerateFiles($targetFolder, "*", [System.IO.SearchOption]::AllDirectories)) {
    $fileInfo = [System.IO.FileInfo]::new($filePath)
    $totalSize += $fileInfo.Length
}

Write-Host "总大小:$totalSize 字节"

注意:这个方案需要你的Windows 7安装了**.NET Framework 4.6及以上版本**,否则.NET API可能不支持长路径。

为什么原来的\\?\前缀没用?

原因是PowerShell的Get-ChildItem cmdlet并没有完全兼容\\?\格式的路径解析,尤其是在递归遍历的时候,内部处理逻辑还是会受限于传统的路径长度限制,所以这个前缀在PowerShell里经常起不到预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:57:38