如何批量转换含内嵌RAR的WinRAR4格式压缩包到WinRAR5格式
嵌套RAR格式批量转换解决方案
优化逻辑说明
针对原有脚本无法识别子目录内嵌RAR的问题,优化后的脚本实现以下能力:
- 用
for /r命令递归遍历解压目录下所有层级的.rar文件,不存在路径识别盲区 - 增加循环校验逻辑,可处理多层嵌套的RAR文件,直到所有内嵌压缩包都完成转换
- 补充路径预创建、错误屏蔽等容错逻辑,避免异常中断
- 所有转换过程默认静默执行,无需人工交互确认
最终可运行脚本
@echo off setlocal enabledelayedexpansion :: 预创建必要工作目录 if not exist Unconverted md Unconverted if not exist converted md converted if not exist z:\temp md z:\temp :: 遍历当前目录下所有顶层RAR文件 for %%i in (*.rar) do ( :: 支持手动终止:只要z:\temp\stop文件存在就立即退出 if exist z:\temp\stop exit /b echo 正在处理:"%%i" set "base_name=%%~ni" md "!base_name!" :: 解压顶层RAR到临时工作目录 cd "!base_name!" rar x ..\"%%i" -y >nul :loop_convert_inner set "has_rar=" :: 递归遍历当前目录下所有层级的RAR文件 for /r %%f in (*.rar) do ( set "has_rar=1" echo 转换内嵌RAR:"%%f" set "rar_dir=%%~dpf" set "rar_name=%%~nf" :: 解压当前内嵌RAR cd "!rar_dir!" md "!rar_name!_temp" cd "!rar_name!_temp" rar x "%%f" -y >nul :: 重新压缩为WinRAR5格式 rar a "..\!rar_name!.rar" -r -ma5 -mt4 -y >nul :: 清理临时文件和原RAR cd .. del "%%f" rd "!rar_name!_temp" /s /q :: 回到顶层临时工作目录 cd "%~dp0!base_name!" ) :: 存在未处理的RAR就继续循环 if defined has_rar goto loop_convert_inner :: 所有内嵌文件处理完成后,打包整个目录为新的顶层RAR rar a "!base_name!.rar" -r -ma5 -mt4 -y >nul :: 归档原始文件、移动转换完成的文件 move ..\"%%i" ..\Unconverted\ >nul move "!base_name!.rar" ..\converted\ >nul cd .. rd "!base_name!" /s /q echo 处理完成:"%%i" ) echo 全部RAR转换任务执行完毕 pause
使用注意事项
- 使用前请将WinRAR安装路径添加到系统环境变量
PATH中,保证rar命令可以全局调用 - 脚本执行前会自动创建
Unconverted(存放原始RAR备份)和converted(存放转换后RAR)两个目录 - 如需终止执行,只需在
z:\temp目录下新建名为stop的空文件,脚本处理完当前文件后就会自动退出 - 脚本默认使用普通压缩率的WinRAR5格式,需要调整压缩等级可在
rar a命令后添加-m<1-5>参数,-m5为最高压缩率 - 处理分卷RAR时会自动合并为单文件,若需保留分卷结构,可将打包命令替换为WinRAR分卷压缩参数,如
-v100m为100MB分卷
内容的提问来源于stack exchange,提问作者lvving
相关产品推荐
相关产品推荐

