我建议如下:
@echo off
for /F "delims=" %%I in ('dir /B "%USERPROFILE%\Desktop\compressing\*.rar"') do "%ProgramFiles%\WinRAR\Rar.exe" a -ep -idq -y -m0 "%USERPROFILE%\Desktop\compressing\%%I" "%USERPROFILE%\Desktop\compressing\readme.txt"
有些人可能认为这也可以在没有命令 DIR 的情况下使用:
@echo off
for %%I in ("%USERPROFILE%\Desktop\compressing\*.rar") do "%ProgramFiles%\WinRAR\Rar.exe" a -ep -idq -y -m0 "%%~I" "%USERPROFILE%\Desktop\compressing\readme.txt"
但这不适用于 FAT32 驱动器,因为命令 FOR 会在修改后再次处理每个 RAR 存档,从而导致无限循环。
NTFS 文件系统驱动程序返回始终按字母顺序排序的文件列表,而 FAT32 文件系统驱动程序返回存储在文件分配表 (FAT) 中的文件列表,因此 FAT 中的排序顺序会随着目录中的每次文件修改而改变。
以下循环将避免 FAT32 驱动器上的无限循环:
@echo off
for %%I in ("%USERPROFILE%\Desktop\compressing\*.rar") do "%ProgramFiles%\WinRAR\Rar.exe" u -ep -idq -y -m0 "%%~I" "%USERPROFILE%\Desktop\compressing\readme.txt"
不同之处在于使用 RAR 命令 u 而不是 a。这导致将单个文件添加到每个 *.rar 文件。当 FOR 再次调用 Rar.exe 以获得已更新的存档时,RAR 检测到该文件已在存档中,并且不会再次修改 RAR 存档。所以在每个 *.rar 文件被Rar.exe 处理两次之后(第一次添加文件,第二次不改变任何内容),FOR 循环结束。
但是,使用命令 DIR 可以避免在 NTFS 和 FAT32 驱动器上多次处理每个 rar 文件。
必须使用 GUI WinRAR.exe 而不是控制台 Rar.exe 来将 readme.txt 添加到 ZIP 压缩包,因为控制台版本仅支持 RAR 压缩包,如程序文件文件夹中文本文件 Rar.txt 顶部所述em>WinRAR 是控制台版本的手册。
@echo off
for /F "delims=" %%I in ('dir /B "%USERPROFILE%\Desktop\compressing\*.zip"') do "%ProgramFiles%\WinRAR\WinRar.exe" a -ep -ibck -y -m0 "%USERPROFILE%\Desktop\compressing\%%I" "%USERPROFILE%\Desktop\compressing\readme.txt"
开关-idq 被开关-ibck 代替,用于在后台运行WinRAR,这意味着最小化到系统托盘。有关 GUI 版本的命令和开关的详细信息,请参阅 WinRAR 选项卡 Contents 的帮助中的 命令行模式 一章。 GUI版本支持的开关列表与控制台版本支持的开关列表略有不同。