如何让PowerShell的Get-ChildItem列出超260字符路径的文件?
PowerShell 5.1及更早版本处理长路径的问题
问题现象
- 使用
Get-ChildItem命令遍历路径长度超过260字符的文件夹时,会抛出ItemNotFoundException错误,或显示以下提示:
指定的路径、文件名或两者过长。完全限定文件名必须少于260个字符,目录名必须少于248个字符。
无效的尝试方案
- 给路径添加
\\?\前缀尝试绕过限制,执行后无任何返回结果; - 使用
[System.IO.DirectoryInfo]类查询目录,仍会触发“路径过长”错误。
有适用范围的解决方案
在Windows Server 2016和Windows 10系统中,可通过修改注册表启用长路径支持:将注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem下的DWORD值LongPathsEnabled设置为1。但该方法仅适用于上述系统,对运行旧版Windows或PowerShell的环境无效。
关于\\?\前缀的疑问
原本预期添加\\?\前缀后,PowerShell/.NET会支持长路径,但实际仍报错。根据微软官方文档,该方法本应可行,文档核心内容翻译如下:
Windows文件系统的最大路径长度限制
Windows传统的文件路径最大长度为260字符,其中目录路径最多248字符,文件名最多260字符。
要绕过此限制,可使用
\\?\前缀,添加后路径长度可扩展至32767字符,但需注意:
\\?\前缀仅适用于本地文件系统路径,无法用于UNC路径;- 使用该前缀时必须提供完全限定的绝对路径,不能包含
.或..等相对路径组件;- 部分.NET API对带
\\?\前缀的路径存在兼容性问题,这也是PowerShell 5.1及更早版本中该方法失效的原因之一。
内容的提问来源于stack exchange,提问作者DylanH333
相关产品推荐
相关产品推荐

