将单个文件添加到文件夹中的每个 rar 文件

Add a single file to each rar file in a folder

我想知道如何在文件夹中的每个 .rar 文件中添加一个文件。

例如我有:

我想将 'readme.txt' 文件添加到每个文件中。

或者,如果这不可能,我可以提取所有 .rar 文件,将它们放入文件夹,然后使用此批处理代码压缩它们?

如何包含 readme.txt 文件?

@ECHO OFF
cd C:\Users\userss\Desktop\compressing
SET PATH=C:;C:\Program Files\WinRAR;C:\Windows\system32;C:\Windows;C:\Win dows\System32\Wbem;%PATH%
FOR /f "delims=" %%d IN ('DIR /B') DO WinRAR a -m0 -ep "C:\Users\userss\Desktop\destination\%%~nxd.rar" "%%~fd"
EXIT

我建议如下:

@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 文件系统驱动程序 returns 文件列表始终按字母顺序排序,而 FAT32 文件系统驱动程序 returns 文件列表存储在文件分配 table (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.txtWinRAR 的程序文件文件夹中,是控制台版本的手册。

@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 中的 Command line mode[=57] 一章=]. GUI版本支持的开关列表与控制台版本支持的开关列表略有不同。