批量删除(从rar文件中)未知目录中的特定文件

问题描述 投票:0回答:1

我需要从〜2000个patata.pat文件中删除rar文件,其中大多数文件都位于这些\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

(猜测最后一个将不起作用),没有运气。

请您帮我一下。

batch-file rar
1个回答
0
投票

此任务可以通过具有以下单个命令行的批处理文件来完成:

@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内核之前删除附加的反斜杠。文件系统。

© www.soinside.com 2019 - 2024. All rights reserved.