【问题标题】:How to unrar all RAR files in a folder to a specific target folder?如何将文件夹中的所有 RAR 文件解压缩到特定的目标文件夹?
【发布时间】:2016-01-05 07:56:10
【问题描述】:

我有一个文件批处理将文件夹中的所有 RAR 文件解压缩到子文件夹中。

C:\test\sub-folder\file.rar -> C:\test\sub-folder\fileunrar

但是当我运行它时,文件被解压到基本文件夹:

C:\test\sub-folder\file.rar -> C:\test\fileunrar

这是我目前正在使用的批处理文件:

@ECHO OFF
cd C:\test
SET PATH=C:;C:\Program Files\WinRAR;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;%PATH%
FOR /f "delims=" %%d IN ('DIR /B') DO unRaR x -y -r -o- *.rar
EXIT

为什么将 RAR 压缩包解压到基本文件夹?

【问题讨论】:

  • 为什么要使用for /F 循环?为什么不直接执行unrar?反正你没有使用变量%%d...
  • 这个问题很模糊。目前for 循环毫无意义地执行unrar 多次解压完全相同的文件。

标签: batch-file unrar


【解决方案1】:

WinRAR 的程序文件夹中有一个文本文件Rar.txt,它是控制台版本Rar.exe 的手册,其中还包含UnRAR.exe 支持的所有命令和开关。无法创建、更新或修复 RAR 档案。

仅在命令提示符窗口中运行UnRAR.exe 而不使用任何参数会导致显示所有支持的命令和开关以及简要说明。

UnRARRarWinRAR 支持在一个目录中解压多个 *.rar 文件,而无需通过单个命令使用 FOR 循环的批处理文件。

对于解压多卷存档,在命令行中指定第一个 RAR 存档文件的文件名就足够了。 UnRARRarWinRAR 自动检测此文件是多卷存档的第一个文件并自动处理所有卷。

当然,UnRARRarWinRAR 在解压包含多个单独存档以及 1 个或多个多卷的文件夹的所有 *.rar 文件时,不会多次处理每个 *.rar 文件档案。

为了用一行解压多个独立的 *.rar 档案,-ad 开关可能有助于避免所有独立档案的内容合并到同一个目录中。

要将目录C:\Temp 中的所有*.rar 存档解压到目录C:\Temp\Extracted,并将所有存档中的文件和文件夹合并到该目录并自动覆盖所有现有文件,请使用以下命令:

"%ProgramFiles%\WinRAR\UnRAR.exe" x -c- -cfg- -inul -o+ -y "C:\Temp\*.rar" "C:\Temp\Extracted\"

提取C:\Temp 中的所有*.rar 文件,并将每个独立的存档提取到C:\Temp\Extracted 的子目录中,并使用存档文件的名称来实现:

"%ProgramFiles%\WinRAR\UnRAR.exe" x -ad -c- -cfg- -inul -o+ -y "C:\Temp\*.rar" "C:\Temp\Extracted\"

-ad 开关使输出文件夹有所不同。

C:\Temp\Extracted 是否已经存在或尚不存在用于解压缩档案并不重要。 UnRARRarWinRAR 总是在提取时创建整个目录树到输出文件夹,如果这是必要的,当然是可能的(写权限,驱动器/共享存在并且没有写保护)。

让我们看一个例子,让差异更加清晰。

C:\Temp 中有 2 个 RAR 压缩文件 MyFirstArchive.rarAnotherArchive.rar,包含以下文件和文件夹。

MyFirstArchive.rar

 Attributes      Size    Date   Time   Name
----------- ---------  -------- -----  ----
    .......      6302  11-10-15 15:25  zzz.doc
    .......    940942  26-08-15 08:07  yyy.txt
    .......   1430688  06-10-14 05:49  Folder1\xxx.pdf
    ...D...         0  12-10-15 07:10  Folder1
----------- ---------  -------- -----  ----
              2377932                  4

AnotherArchive.rar

 Attributes      Size    Date   Time   Name
----------- ---------  -------- -----  ----
    .......     28165  08-01-12 17:50  zzz.doc
    .......      3743  29-10-14 07:18  Folder2\index.txt
    .......     27141  29-10-14 07:18  Folder1\index.txt
    .......    940942  26-08-15 08:07  index.txt
    ...D...         0  12-10-15 07:10  Folder1
    ...D...         0  12-10-15 07:12  Folder2
----------- ---------  -------- -----  ----
               999991                  6

第一个命令的结果是:

  • C:\Temp\Extracted
    • 文件夹 1
      • index.txt
      • xxx.pdf
    • 文件夹 2
      • index.txt
    • index.txt
    • yyy.txt
    • zzz.doc

AnotherArchive.rar 中的zzz.doc 已覆盖MyFirstArchive.rar 中的zzz.doc

带有开关-ad 的第二个命令导致:

  • C:\Temp\Extracted
    • MyFirstArchive
      • 文件夹 1
        • xxx.pdf
      • yyy.txt
      • zzz.doc
    • 另一个存档
      • 文件夹 1
        • index.txt
      • 文件夹 2
        • index.txt
      • index.txt
      • zzz.doc

两个档案的文件夹和文件被提取到不同的文件夹中,并以档案文件的名称命名。

【讨论】:

    猜你喜欢
    • 2015-10-03
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多