根本解法是启用系统级长路径支持:修改注册表hkey_local_machine\system\currentcontrolset\control\filesystem下的longpathsenabled值为1并重启,使路径限制从260字符升至32767字符;辅以powershell -literalpath、robocopy或zip压缩等绕过方法。

当你在Windows资源管理器中复制一个嵌套很深的文件夹(比如从macOS导出的.app包、Node.js项目node_modules子目录、或CI构建产物),系统弹出“文件名对目标文件夹可能过长”提示,说明完整路径已突破260字符的MAX_PATH硬限制——这不是文件名本身超长,而是盘符+所有父级目录名+文件名+终止符总和超标,常规拖放、Ctrl+C/V全部失效。
启用系统级长路径支持(一劳永逸)
这一步改的是Windows内核行为,让系统原生支持最长32767字符路径,后续所有操作(包括PowerShell、CMD、资源管理器)都可直接受益,但必须重启才生效。
第一步:按 Win + R 输入 regedit,以管理员身份运行注册表编辑器。
第二步:导航至 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem。
第三步:在右侧空白处右键 → 新建 → DWORD (32位) 值,严格命名为 【LongPathsEnabled】(大小写与拼写必须完全一致,少一个字母或错一个大写都会失败)。
第四步:双击该值,将“数值数据”设为 1,基数选“十进制”,点击确定。若已存在但值为0,直接修改即可。
第五步:关闭注册表编辑器,必须重启电脑,否则设置不加载。重启后,路径长度限制即刻解除。
用PowerShell强制移动(无需重启,精准直达)
适用于你刚改完注册表但还没重启,或目标文件已无法在资源管理器中右键选中——因为路径太长,图形界面根本读不到这个文件节点。
方法一:管理员权限运行PowerShell,执行以下命令:
Move-Item -LiteralPath "C:\a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z\file.txt" -Destination "D:\short\folder\" -Force
-LiteralPath 参数是关键,它跳过所有通配符解析和反斜杠转义,把引号里的内容当纯字符串处理;没加这个参数,PowerShell会误判路径中的方括号或花括号为通配符而报错。
方法二:如果连源路径都点不开、复制不了,先用 Get-ChildItem -Path "C:\a\b\c" -Recurse | Where-Object {$_.FullName.Length -gt 200} 扫描出超长路径项,再对准具体对象执行Move-Item。
用Robocopy绕过限制(内置工具,零安装)
Robocopy不走Windows Shell路径解析层,天生无视260字符限制,即使你没开LongPathsEnabled也能用,特别适合批量移动整个深层目录树。
以管理员身份打开Windows Terminal,输入命令:
robocopy "C:\source\deep\nested\folder" "D:\dest" /E /MOVE /R:0 /W:0
注意两个路径都必须用英文半角双引号包裹,且结尾不能加反斜杠——加了会导致robocopy把目标识别为文件而非文件夹,报错“目标不是目录”。
/E 表示复制所有子目录(含空目录),/MOVE 表示移动(复制完自动删源),/R:0 /W:0 是关掉重试机制,避免卡死在某个不可读子项上。
压缩中转法(最简单,无门槛)
如果你只是临时传一次文件,不想动系统设置、也不愿敲命令,就用这个办法:ZIP压缩包内部路径独立于宿主系统,解压时新路径从当前解压位置起算,彻底避开原始路径叠加问题。
在源文件所在目录空白处右键 → “发送到” → “压缩(zipped)文件夹”。
生成的 xxx.zip 文件路径长度只取决于你存的位置(如 D:\temp.zip),跟内部几百层嵌套无关。
把这个zip文件拖到目标位置,右键解压即可。解压后的文件路径以当前解压目录为根,例如解压到 E:\project,那内部 xxx.app/Contents/Resources/.../file.js 的实际路径就是 E:\project\xxx.app\...\file.js,长度重新归零计算。











