NOTE:已确定Windows较新的版本中,只在个别情况下生效。原因大约是:在Windows10的某个版本(大概是1607)之后,Windows的好几个path相关的API都出现了bug(未能记录下来对应的API名称,抱歉!),例如cmd用了几十年,用来生成短路径的API已经无法处理一些情况下的长路径(如安装多个版本Visual Studio时,无法处理小于140版本的长路径。具体可参考CygWin的cygpath.exe以及该工具的源代码中用到的win API),该bug已经持续了四五年,并影响到了Windows11。
结论:对于较新版的Windows,本文的解决方案暂时处于失效状态,版本介于2016年至2019年间的Windows有可能依旧适用。该结论是基于对特定情况下无法生成短路径、无法处理长路径的现象及对第三方开源代码研究、归纳总结而得,不保证原因的正确性。
相关背景
Windows一直以来都有一个系统常量MAX_PATH = 260
,用于定义一个文件名(Filename)或者全路径(Directory route)的最大长度,在实际实践中,不管在命令行或者是使用编程语言调用相关系统API处理长路径文件时都会受到此常量的限制,即最大长度不得超过260个字符(characters),这是为了限制某些进程访问过长的路径而对系统产生的潜在风险和影响。
在2016年的Windows10 Insider Preview版本(现已支持Windows10,Windows Server 2016及以上版本系统)中,微软为Windows用户增加了一项策略Enable NTFS long paths
,允许用户在激活该策略时可以突破260个字符的文件路径长度限制。早期版本中只针对NTFS格式的硬盘支持该项策略。
设置方法
- 打开策略管理器:按下win徽标键+R,输入
gpedit.msc
并回车,或者直接通过开始菜单打开gpedit
; - 定位到
Local Computer Policy
>Computer Configuration
>Administrative Templates
>System
>Filesystem
; - 在当前位置寻找策略
Enable NTFS long paths
,在较老的系统版本中,该项策略会在Filesystem
下的NTFS
策略组中; - 双击
Enable NTFS long paths
策略,将状态改为Enabled
并保存即可。