2-02 10,534
从本月起我们的成品可能不再遵从较为严格的路径长度限制。这篇文章将简单介绍如何在 Windows 系统中启用长路径功能。
Windows 系统中较为保守的最大路径长度限制一直为人所诟病。在 Windows 系统的默认配置下,最大路径长度为 MAX_PATH,定义为 260 个字符。除去路径开头的驱动器号、冒号、反斜杠以及路径末尾的终止字符,实际可用的部分只有 256 个字符。而在 Windows 的文件资源管理器中,由于一些额外保留字符限制,实际可使用的路径长度会更短一些。
256 个字符看似不少,但在我们的命名规范下,项目目录名、片名、特典名、CD 目录名、歌曲名,这些字段如果有多个较长的部分累加在一起,就很可能超过长度限制。
长年以来,我们都在与路径长度限制进行抗争,压缩各个字段的命名,尽最大努力压缩到 240 个字符之内。但是在 2024 年的今天,我们还是得说,240 个字符真的是太少啦!
一方面,即使我们保证压缩到 240 个字符之内,也无法保证在观众本地就不超过限制,因为显然观众并不一定下载到磁盘根目录,并且下载时多个 10-20 字符的前缀路径也很常见;另一方面,从长远角度来看,制作一些大合集项目时,即使我们每个字段长度都压缩到最小,有时也不可避免会超过限制。
针对最大路径长度限制的问题,Windows 给出了一个不算完整的解决方案:
从 Windows 10 版本 1607 开始,可以启用长路径功能。
以下有三种启用长路径的方法,可以根据自身情况进行选择。
1. 通过 PowerShell 进行设置
(1). 使用管理员模式启动 PowerShell
(2). 执行以下命令
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
-Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
(3). 重启计算机
2. 通过注册表文件 (.reg) 进行设置
(1). 新建一个 .txt
文本文件
(2). 将以下命令复制到文件中
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"LongPathsEnabled"=dword:00000001
(3). 将文件后缀名改为 .reg
(4). 双击 .reg
文件执行
(5). 重启计算机
3. 通过组策略编辑器进行设置 (需要 Windows 专业版)
(1). 使用 Windows键 + R
组合键调出 运行
窗口,输入 gpedit.msc
启动组策略编辑器
(2). 按以下路径选择配置项,开启长路径功能
英文路径:
Computer Configuration > Administrative Templates > System >
Filesystem > Enable Win32 long paths
中文路径:
计算机配置 > 管理模板 > 系统 > 文件系统 > 启用 Win32 长路径
(3). 重启计算机
开启长路径功能之后,常规的 BT 软件就可以正常下载超长路径的种子了。不过需要注意的是,并非所有应用程序都支持长路径,比如 Windows 自带的文件资源管理器,即使开启长路径功能也无法处理超长路径的文件。
如果有编辑超长路径文件的需求,可以使用第三方的更强大的工具,比如 One Commander。
- 在 Windows 系统中启用长路径功能 - 2024年2月2日
- VCB-Studio 2024 冬季组员招募(已截止) - 2024年1月1日
一直都开着。甚至开了很多年,但是总感觉没有用!年轻时习惯把学习资料一层一层的隐藏,导致有时候有些软件就会报个错
原来是【不过需要注意的是,并非所有应用程序都支持长路径,比如 Windows 自带的文件资源管理器,即使开启长路径功能也无法处理超长路径的文件。】
😯
回复给哈姆: 需要应用程序适配,系统支持长路径,并且应用程序开启 longPathAware 元素才行;
最大路径长度限制 – Win32 apps | Microsoft Learn: https://learn.microsoft.com/zh-cn/windows/win32/fileio/maximum-file-path-limitation?tabs=registry
回复给 哈姆:是的,我前段时间就触发了这个东西,删都删不掉,最后不知道咋搞才删掉了(
W7系统有办法吗 在线等 挺急的
好奇win为什么限制这个长度呀,是系统的什么功能用不了长路径吗
回复给a244115379:
向下兼容遗留下的东西而已,可能是上世纪为了省内存定下来的。
Linux 也有类似的,Btrfs 为了兼容 EXT4 的文件名长度限制硬编码为 255 Bytes,实际上注释也写了可以更长。
https://github.com/torvalds/linux/blob/0c7030038e6106711c5d0b237c980905dd3244ec/include/uapi/linux/btrfs_tree.h#L22
目前下载番剧还没有遇到这个问题欸,安装qBitttorrent的时候有个选项是解除WINDOWS长路径限制,不知道有没有用
❓
坏了,我挂在linux的nas上下的,没治(悲
只能靠自己人肉改名字了哼啊啊啊啊啊啊啊
回复给Mr.win7: linux的限制不一样吧
回复给逞零词: Linux限制更严格,几乎绝大多数的文件系统都是路径总长度256字符,而且没有任何解决方案。
256这个值是硬编码在内核里的。我对内核不太熟,听说就算铁头娃改成更大的值去自行编译内核,也会因为inode的数据结构固定的原因实际上无法使用。
所以只能依赖bt软件本身去重命名文件了,基本上就是等报错再人肉改了。
回复给Mr.win7: 错误的,是文件名而不是总长度,长度是定义在文件系统而不是在内核,如ext4对于名字长度是一个8bit的字段。
在 Linux 上:文件名的最大长度为 255 个字节。 文件名和路径名组合的最大长度为 4096 个字节。 此长度与操作系统支持的 PATH_MAX 匹配。 字符的 Unicode 说明可能占据几个字节,所以组成路径名和文件名最大字符数会有所不同。 实际限制是路径和文件组件中的字节数,可能对应于相同字符数。
回复给ΤΑΤ: 回去仔细重读了一下,是我搞混了,对不起。。。你是对的。太丢脸了
是文件名的长度难以通过修改文件系统下的名字长度做修改。所以主要是文件名长度在linux下不好调整。
最早注意到是用POT播放番剧的时候 因为名称太长结果不能正确加载播放列表 显示的文件名也是乱码哈哈
太感谢了 这个帮大忙了 经常遇到路径太短 无法复制粘贴
感谢科普,分享的One Commander好用又好看
感謝!
这个教程等好久了,之前经常遇到这个问题,有人说安装个Python能治,结果没用
回复给az6338890: https://docs.python.org/zh-cn/3.11/using/windows.html#removing-the-max-path-limitation
印象中python安装包确实会在安装时给没有启动长路径的电脑加一个启动长路径的选项,没有这个选项说不定是已经开启过了
回复给tasty0tomato: 我说怎么我的长路径已经被开启了,原来是这样啊。
回复给az6338890: 刚发现qBittorrent安装时也会默认启用长路径 😆
支持!