Windows UnRar 批处理脚本需要忽略 .part02.rar 到 part99.rar 扩展名

Windows UnRar 批处理脚本需要忽略 .part02.rar 到 part99.rar 扩展名

我有两个 Windows 批处理脚本,它们都用于递归它们所在的文件夹,并将每个 .rar 文件提取到 rar 文件的文件夹中。

但是当文件夹使用以下结构时:

file.part01.rar
file.part02.rar
file.part03.rar  ect..

脚本在尝试提取每个文件时会阻塞(因为它们与 .rar 扩展名匹配),并向用户显示 FileExtract.bla 已经存在:覆盖?(Y)es /(N)o?rar 存档部分数量的 X 倍(通常为 20 或 30 倍)。

我一直在尝试弄清楚如何在批处理脚本中首先过滤掉扩展名为 part02.rar 到 part99.rar 的所有文件(但不是part01.rar,因为这是我确实想要提取的文件),然后将其传递给“DO”/unrar 命令。

这里有两个不同的批处理文件,它们以相同的方式工作(并且在 part02.rar 文件上以相同的方式失败):

@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "sourcefolder=."
FOR /R "%sourcefolder%" %%a IN (*.r*) DO (
    FOR /f "delims=" %%b IN ('echo %%~xa^|findstr /r "\.r.*"') DO
("C:\Program Files\7-zip\7z.exe" x "%%~a")
)

和#2:

@echo on
FOR /D /r %%F in ("*") DO (
    pushd %CD%  
    cd %%F
       FOR %%X in (*.rar *.zip) DO (
        "C:\Program Files\7-zip\7z.exe" x "%%X"
    )
popd
)

谢谢

答案1

脚本在尝试提取每个文件时会阻塞(因为它们与 .rar 扩展名匹配),并向用户显示 FileExtract.bla 已经存在:覆盖?(Y)es /(N)o?rar 存档部分数量的 X 倍(通常为 20 或 30 倍)。

为什么不直接用管道输送“N”命令7z告诉他们选择“N”选择权“不”如果有的话?

我不确定这些命令是否总是从适用的开始file.part01.rar,然后按顺序移动到file.part02.rar,,file.part03.rar等等,或者这对于提取重复文件的内容是否真的很重要。

如果自动化被阻止,只有当问题存在时才选择此选项,然后选择该选项“N”选项自动应该允许其他文件也被提取并完成自动化。

因此问题是这些 RAR 文件第[02-99].rar文件名提取已经存在的文件,这些文件被提取出来,所以它会询问您是否要覆盖现有文件。

如果它提取01首先命名文件,然后尝试所有后续匹配的文件名,其中存在提取文件覆盖冲突,那么这应该有效。

如果这按预期工作,那么这将对批处理脚本逻辑所需的内容进行非常小的更改(参见下面的示例)。

#1

@ECHO OFF &SETLOCAL disableDelayedExpansion
SET "sourcefolder=."
FOR /R "%sourcefolder%" %%a IN (*.r*) DO (
    FOR /f "delims=" %%b IN ('echo %%~xa^|findstr /r "\.r.*"') DO
(ECHO N | "C:\Program Files\7-zip\7z.exe" x "%%~a")
)

#2

@echo on
FOR /D /r %%F in ("*") DO (
    pushd %CD%  
    cd %%F
       FOR %%X in (*.rar *.zip) DO (
        ECHO N | "C:\Program Files\7-zip\7z.exe" x "%%X"
    )
popd
)

相关内容