此任务可以使用带有以下单个命令行的批处理文件来完成:
@for /F "eol=| delims=" %%I in ('dir "%~dp0*.rar" /A-D /B 2^>nul') do @"%ProgramFiles%\WinRAR\Rar.exe" d -idcd "%~dp0%%I" "patata.pat" "*\patata.pat"
此命令行甚至可以在 FAT16、FAT32 和 exFAT 驱动器上运行,而无需多次处理 *.rar 文件。
也可以在 NTFS 分区上执行的批处理文件中使用以下命令行。
@for %%I in ("%~dp0*.rar") do @"%ProgramFiles%\WinRAR\Rar.exe" d -idcd "%%I" "patata.pat" "*\patata.pat"
此命令行处理批处理文件目录中的所有 *.rar 文件在 FAT16、FAT32 和 exFAT 驱动器上无法正常工作,因为目录条目列表和 *.rar 目录条目的顺序在每次执行时都会更改Rar.exe 的情况下,RAR 文件被修改是因为从存档的根目录或存档内的任何目录或整个 RAR 文件中删除 patata.pat(如果不包含除patata.pat 以外的任何内容)。因此,RAR 文件会被多次处理,在 FAT16、FAT32 或 exFAT 文件系统的驱动器上使用此命令行可能会错误地跳过某些 RAR 文件。
不同之处在于,第一个命令行导致 FOR 在后台执行 %ComSpec% /c 并在 DIR 命令行作为附加参数附加了一个命令进程执行DIR命令,将所有RAR文件名,只有文件名和文件扩展名输出到后台命令进程的STDOUT。此输出由 FOR 捕获,然后逐行处理。因此,Rar.exe 引起的目录条目列表的更改无关紧要,因为内存中的文件名列表由 FOR 处理,而不是在循环迭代期间更改的目录条目列表。
诀窍是指定patata.pat 一次,不带任何路径以在RAR 文件的根目录中删除此文件,并再次使用*\patata.pat 将其从RAR 文件中删除,并使用RAR 文件中存储的任何路径。 *\ 任何路径在Rar.txt 中都有特殊解释,这是 WinRAR 控制台版本Rar.exe 的手册。
RAR 命令d 用于从RAR 文件中删除目录或文件,开关-idcd 用于禁止版权,Done 消息也记录在文本文件Rar.txt 中。
以%~dp0 引用的批处理文件的目录路径始终扩展为以\ 结尾的字符串。出于这个原因,%~dp0 不应与带有文件夹或文件名的附加反斜杠连接,因为这会导致最终在执行时串联两个反斜杠,并且 Windows 内核必须在将完整限定的文件/文件夹名称传递给之前删除附加的反斜杠文件系统。