如何在Bat文件中用Unrar提取超260字符路径的RAR压缩包?
解决长路径RAR压缩包的Bat解压方案
我来帮你搞定这个问题——你遇到的核心就是Windows传统的260字符路径长度限制,右键解压能成功是因为现代资源管理器已经适配了长路径支持,但unrar.exe默认没遵循这个规则。下面给你具体的Bat脚本实现方案:
一、先确保系统支持长路径
这是前提,不然再好的脚本也没法正常工作:
- Windows 10 1607+/Windows 11专业版/企业版:
- 按下Win+R输入
gpedit.msc打开组策略编辑器 - 导航到
计算机配置 > 管理模板 > 系统 > 文件系统 > 启用 Win32 长路径 - 设置为已启用,重启电脑生效
- 按下Win+R输入
- Windows家庭版(无组策略):
- 按下Win+R输入
regedit.exe打开注册表编辑器 - 定位到
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem - 修改
LongPathsEnabled的值为1(DWORD类型),重启生效
- 按下Win+R输入
二、Bat脚本的两种实现方式
方法1:用\\?\前缀绕过路径限制
Windows的\\?\前缀可以直接突破260字符路径限制,把压缩包和目标路径加上这个前缀传给unrar.exe即可:
@echo off setlocal enabledelayedexpansion :: 替换成你的RAR压缩包路径,记得用双引号括起来 set "RAR_PATH=C:\This\Is\A\Super\Long\Path\To\Your\Archive\File.rar" :: 解压目标路径,留"."就是当前目录,也可以指定长路径 set "DEST_PATH=." :: 给路径加上\\?\前缀,去掉原路径的双引号避免冲突 set "LONG_RAR_PATH=\\?\%RAR_PATH:"=%" set "LONG_DEST_PATH=\\?\%DEST_PATH:"=%" :: 调用unrar解压:x是保留目录结构,-y是自动确认覆盖 unrar x -y "%LONG_RAR_PATH%" "%LONG_DEST_PATH%" echo 解压完成! pause
方法2:用-ep3参数简化路径
如果不想折腾长路径前缀,也可以用-ep3参数——它会忽略压缩包内的路径前缀,直接把所有文件平铺到目标目录,避免路径叠加后超长:
@echo off setlocal :: 替换成你的压缩包和目标路径 set "RAR_PATH=C:\This\Is\A\Super\Long\Path\To\Your\Archive\File.rar" set "DEST_PATH=C:\Your\Target\Long\Path" :: -ep3忽略压缩包内的路径前缀,-y自动确认覆盖 unrar x -y -ep3 "%RAR_PATH%" "%DEST_PATH%" echo 解压完成! pause
三、几个关键注意事项
- 确保
unrar.exe在系统PATH里,或者和Bat脚本放在同一目录,也可以在脚本里写全路径(比如"C:\Program Files\WinRAR\unrar.exe") - 路径里有空格的话,一定要用双引号括起来,避免脚本解析出错
- 测试时可以加一行
echo %LONG_RAR_PATH%,确认长路径前缀加对了
内容的提问来源于stack exchange,提问作者guillaume_lin
相关产品推荐
相关产品推荐

