我需要从大约2000 * .rar文件中删除patata.pat
文件,其中大多数都位于这些\unknown folder\patata\
文件中的\patata\
或rar
文件夹中,但可能位于更深的目录中。
我尝试过没有运气
for %%f in (*.rar) do "%ProgramFiles%\WinRAR\RAR.exe" d "%%f" patata.pat
和
for %%f in (*.rar) do "%ProgramFiles%\WinRAR\RAR.exe" d "%%f" %~dp0\patata\patata.pat
我猜想最后一个将不起作用。
如何从RAR文件中删除未知目录中的特定文件?
此任务可以通过具有以下单个命令行的批处理文件来完成:
@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文件(如果除patata.pat
以外的任何内容),则修改RAR文件时的patata.pat
。因此,在具有FAT16,FAT32或exFAT文件系统的驱动器上使用此命令行时,RAR文件将被多次处理,并且某些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内核必须在将完整的合格文件/文件夹名称传递给Windows内核之前删除附加的反斜杠。文件系统。