【问题标题】:How to extract all multi-volume RAR archives from subfolders of a folder?如何从文件夹的子文件夹中提取所有多卷 RAR 档案?
【发布时间】:2015-07-16 20:35:01
【问题描述】:

我正在寻找一种在批量下载后解压多卷档案的方法。

我用 .r 下载文件夹??通过 FTP 监控程序在其中的文件,并希望 WinRAR 进入源文件夹的第一个子文件夹并开始解压缩 .r00,删除存档并将包含解压缩文件的文件夹移动到新位置。

然后批处理脚本应该使用下一个子文件夹再次启动此过程。

假设源文件夹C:\Users\unpack 包含以下带有文件的子文件夹:

  • 源文件夹
    • 子文件夹 1
      • Archive1.r00
      • Archive1.r01
      • Archive1.r02
      • xxx.txt
    • 子文件夹2
      • Archive2.r00
      • Archive2.r01
      • yyy.txt
    • 子文件夹3
      • Archive3.r00
      • Archive3.r01
      • Archive3.r02
      • Archive3.r04
      • Archive3.r05
      • zzz.txt

我已经开始使用下面链接中的脚本执行此操作,但该脚本无法执行我想要的操作,因此我开始了一个新问题。

How to unpack all rar archives in all subfolders of a folder and then delete the archives?

上面链接中的脚本解压缩所有子文件夹中的所有文件,然后将文件夹及其文件移动到新位置。我希望脚本解压缩并移动源文件夹中子文件夹的子文件夹。

编辑.1

如果 winrar 已准备好第一个子文件夹,则源文件夹中的结构应如下所示:

  • 源文件夹
    • 子文件夹2
      • Archive2.r00
      • Archive2.r01
      • yyy.txt
    • 子文件夹3
      • Archive3.r00
      • Archive3.r01
      • Archive3.r02
      • Archive3.r04
      • Archive3.r05
      • zzz.txt

C:\Users\new-location 中的文件和文件夹应如下所示:

  • 源文件夹
    • 子文件夹 1
      • xxx.mp4
      • xxx.txt
    • 子文件夹2
      • yyy.mp4
      • yyy.txt
    • 子文件夹3
      • zzz.mp4
      • zzz.txt

【问题讨论】:

  • 您想要的内容与脚本的功能有何不同?

标签: batch-file archive extraction rar winrar


【解决方案1】:

此任务可能的批处理代码是:

@echo off
setlocal EnableDelayedExpansion
set "BaseSourceFolder=C:\Users\Unpack"
set "BaseTargetFolder=C:\Users\New-Location"
for /D %%D in ("%BaseSourceFolder%\*") do (
    set "TargetFolder=%BaseTargetFolder%\%%~nxD"
    if not exist "!TargetFolder!" md "!TargetFolder!"
    "%ProgramFiles%\WinRAR\Rar.exe" x -cfg- -idq -y "%%~fD\*.r??" "!TargetFolder!"
    if not errorlevel 1 (
        del /F /Q "%%~fD\*.r??"
        move /Y "%%~fD\*" "!TargetFolder!">nul 2>nul
        rd "%%~fD" 2>nul
    )
)
rem rd "%BaseSourceFolder%" 2>nul
endlocal

for /? 在命令提示符窗口中执行会显示带有参数/D 的命令for 的帮助,这意味着在基本源文件夹中与* 匹配的每个目录。

在循环中,首先根据要处理的子文件夹的名称定义目标文件夹名称。 %%~fD%%~nxD 也由 for /? 解释,文件夹通常没有扩展名,因此 %%~nD 通常也足够了。

如果此目标文件夹尚不存在,则接下来创建此目标文件夹。

然后执行Rar.exe将当前子文件夹中的多卷存档直接解压到定义的目标文件夹中。

*.r?? 用于使此批处理文件适用于具有旧命名方案ArchiveName.r00ArchiveName.r01、...以及更好的命名方案ArchiveName.part01.rarArchiveName.part02.rar、.. . WinRAR 5.21 版默认使用。 RAR 自动跳过从匹配*.r?? 的列表中提取多卷存档期间已处理的存档文件。

评估Rar.exe 的退出代码以确定是否发生任何错误。如果分配给 errorlevel 的退出代码低于 1,则没有错误,并且执行 if 分支的 3 个命令,导致首先删除所有 RAR 压缩文件。 p>

当前子文件夹中的剩余文件也被移动到当前目标文件夹,即文件夹结构示例中的*.txt文件。

由于当前子文件夹现在应该是空的,命令 rd 应该能够删除目录。如果由于子文件夹仍不为空而出现错误,则子文件夹仍保留在基本源文件夹中。

如果一切正常,则基本源文件夹为空。 for 循环之后的注释行也可用于删除空的基本源文件夹,但如果有任何失败,请保留该文件夹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 2017-09-19
    • 2021-02-25
    • 2013-11-26
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多