这很容易实现,因为控制台版本Rar.exe 以及GUI 版本WinRAR.exe 支持在命令行中指定多个文件或目录以添加到同一个存档文件中。
@echo off
for /D %%D in ("C:\directory_with_files_you_want_to_compress\*") do "%ProgramFiles(x86)%\WinRAR\Rar.exe" a -cfg- -ep -idq -m0 -x*.rar -v100m "C:\where_you_want_to_save_new_rar_files\%%~nxD.rar" "%%~fD\" "C:\directory_with_readme.txt\readme.txt" && rd /Q /S "%%~fD" || echo/ && pause
同上更易读:
@echo off
for /D %%D in ("C:\directory_with_files_you_want_to_compress\*") do (
"%ProgramFiles(x86)%\WinRAR\Rar.exe" a -cfg- -ep -idq -m0 -x*.rar -v100m -y "C:\where_you_want_to_save_new_rar_files\%%~nxD.rar" "%%~fD\" "C:\directory_with_readme.txt\Readme.txt"
if not errorlevel 1 (
rd /Q /S "%%~fD"
) else (
echo/
pause
)
)
批处理代码使用控制台版本Rar.exe而不是GUI版本WinRAR.exe,因为这个存档文件创建任务绝对不需要使用GUI版本。
Rar删除所有压缩文件的开关-df被移除,因为readme.txt在处理完第一个子目录后不应该被Rar自动删除。该文件还必须添加到其他存档文件中才能为其他子目录创建。相反,命令 RD 用于删除已成功处理的子目录。在诸如要创建的 RAR 存档之类的错误已经存在并且被写保护时,将输出一个空行并使用 echo/ 并使用 pause 停止处理。
添加了开关-idq 以在安静模式下运行Rar,这会导致仅输出错误。
开关-m0 和-v100m 导致只是存储而不是将每个子目录中的所有文件真正压缩到一个多卷RAR 存档中,每卷100 MB。所以这个批处理文件显然是用来将已经压缩的档案、音频、图像或视频文件打包成多卷档案。
-y 开关被添加到自动可能的提示中,yes。
所有开关都记录在 WinRAR 程序文件夹中的文本文件 Rar.txt 中。
我在%%~fD 之后添加了一个反斜杠,以防其他人希望将此代码与开关-ep1 一起使用而不是-ep,并添加开关-r 以递归归档每个子目录而不添加子目录名称存档也是。使用的开关只归档每个子目录中的文件,而不是它们的子目录,尽管在创建多卷 RAR 压缩文件后完全删除了已处理的子目录。
另请参阅问题的答案: