7-zip 命令行递归提取子目录中的档案,并将其输出到这些子目录中

7-zip 命令行递归提取子目录中的档案,并将其输出到这些子目录中

我有数百个子目录,每个子目录中都有一个或多个档案。我想递归提取每个子目录中的每个档案,并将提取的文件输出到每个子目录中。

从这个开始:

DIR1
    SUBDIR2
    --->ZipFileA
    --->ZipFileB
    SUBDIR3
    --->ZipFileC
    --->ZipFileD

希望以此结束:

DIR1
    SUBDIR2
    --->ExtractedZipFileA
    --->ExtractedZipFileB
    SUBDIR3
    --->ExtractedZipFileC
    --->ExtractedZipFileD

我该怎么做呢?

我试过了...

7z x E:\Downloads\New -r -o*

...但是这会将所有内容输出到主目录中,而不是将它们输出到它们自己的子目录中。

答案1

像魔法一样工作:

for /r %a in (*.zip) do 7z.exe e "%~a" -o"%~dpa"

答案2

我发现上面列出的是:

for /r %a in (*.zip) do 7z.exe e "%~a" -o"%~dpa"

将所有内容展开到当前目录中。无论如何,这不是我所寻找的。

因此,假设我处于一个包含多个 .zip 文件的工作目录中,并且每个 zip 文件都包含其他 zip 文件等,那么以下操作将展开它们并保留路径:

for /r %A in ("*.zip") do 7z.exe x "%~dfA" -o"%~pnA"

为了解释这一点,有两个部分,

  • 根据条件搜索文件
  • 对找到的每个文件执行某些操作

第一部分,搜索/r %A ("*.zip")

搜索匹配的文件(“*.zip”)并为了找到的每个文件用文件名替换变量 %A,然后将其传递给第二部分...我跳过了 /r,即递归标志

第二部分,做一些事情(所以对于找到的每个文件都执行...)

do 7z.exe x "%~dfA" -o"%~pnA"

执行 7z.exe x- 执行 7zip 提取
,然后为 7z 提供两个参数
“%〜dfA”“%-DF”在这种情况下,bit 获取驱动器号和其后的任何内容的完全限定路径A紧随其后,这是对我们之前声明的引用A并且文件被传递给 do

-o"%~pnA"-o是 7zip 输出标志 "%~pn提取路径和文件名(不含扩展名),同样A
例子
给定文件:压缩包:\测试\foo.zip被传递给:-o"%~pnA"
“%-p”将从文件中提取路径,*c:\测试*
n“将提取简单的文件名,
导致目录:\测试\foo

参考 https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/for

相关内容