使用 7zip 递归提取特定文件的 Windows 批处理脚本

标签 windows batch-file extract directory-structure 7zip

我有一个包含多个 .tar 文件的目录,其中包含多个 .zip 文件。树结构有点像这样:

testDirectory
    -tarArchive.tar
        -directory1
            -zipArchive11.zip
                abc.XML
                1.TIF
                2.TIF
                ...
            -zipArchive12.zip
                xyz.XML
                a.TIF
                b.CDX
                ...
            .
            .
            .
        -directory2
            -zipArchive21.zip
                ...
            -zipArchive22.zip
                ...
            .
            .
            .
        .
        .

我需要一个批处理脚本来递归地从每个 .zip 中仅提取 .XML,同时保持树结构(首先是所有 .zip将从主 .tar 中提取,然后仅从每个 .zip 中提取 .XML)。此外,处理后的文件应在之后删除。

我可以用这段代码实现其中的大部分

for /R "C:\Users\frozenfyr\Desktop\test" %%I in ("*.zip", "*.tar") do (
  "C:\Program Files\7-Zip\7z.exe" x -y -o"%%~dpI" "%%~fI" && del "%%~fI"
)

除了两件事:

  1. 我无法仅提取 .XML 文件。

    "C:\Program Files\7-Zip\7z.exe"x -y -o"%%~dpI""%%~fI""* .zip"-r 将 不提取 XML 文件和 "C:\Program Files\7-Zip\7z.exe"x -y -o"%%~dpI""%%~fI""*.XML"-r 不(不应该)工作,因为 .tar 文件中没有匹配项。 有没有办法做类似的事情 "C:\Program Files\7-Zip\7z.exe"x -y -o"%%~dpI""%%~fI""*.zip""*.XML"-r

  2. .tar 文件在处理后没有被删除。我试过这个 .zip 文件上的脚本并且它有效(它们在之后被删除 处理)。

我已经试过 powershell script但我不是很满意。我觉得批处理脚本对我来说很容易处理。我什至找到了 post on SU但它没有提到多种特定格式/文件。我读了Command Line Version User's Guide并考虑了-x switch但它没有用。

我不能在这里引用所有引用资料,但我确实浏览了很多 SO 和 SU 帖子,这次 Google 可能不是我的 friend 。我不确定 SO 还是 SU 应该是问这个问题的地方,我在这两个社区都找到了很好的引用资料。我更经常使用 SO,所以我来了。

请帮助我,这让我发疯..

最佳答案

我已经能够解决我的第一个问题。第二个看起来有点复杂。 del 命令适用于较小的文件。因为我的 .tar 很大 (>1GB),我认为下一个循环会在命令删除存档之前开始执行。如果没有其他人在这里得到答案作为 future 的指南,这对我来说是件好事。

无论如何,对于第一个问题,我发现我需要使用开关 -x 进行递归,即 -xr 并且因为我有多个扩展,所以我想跳过,我必须创建 ignore.txt 并在其中添加所有异常。我的完整脚本如下所示:

for /R "C:\Users\frozenfyr\Desktop\test" %%I in ("*.zip", "*.tar") do (
  "C:\Program Files\7-Zip\7z.exe" x -y -xr@"C:\Users\frozenfyr\Desktop\ignore.txt" -o"%%~dpI" "%%~fI" && del "%%~fI"
)

如果我只想忽略一个扩展名,我会使用 -xr!"*.extension" 而不是 -xr@"C:\Users\frozenfyr\桌面\ignore.txt"

顺便说一句,-xr 不会阻止 7zip 处理排除的文件,它可能会在解压后删除它们,因为我在命令提示符下看到了 extracting abc.TIF

关于使用 7zip 递归提取特定文件的 Windows 批处理脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24339419/

相关文章:

windows - 如何限制批处理变量的长度

php - 提取文本并保留 php 中的格式

matlab - 从 MATLAB 中的 ezplot 提取数据

java - 从网页程序中获取所有图像 | java

c++ - FFI/MemoryPointer 内存分配

windows - 如何使用 VirtualBox 和 Ubuntu 作为开发环境以及 Windows 10 和 Android Studio 作为 Android 模拟器在 React Native 中进行开发

windows - 自定义鼠标光标的阴影 (2)

linux - 如何安装带有远程数据库的 SonarQube 服务器?

batch-file - 将迭代添加到批处理文件中的文本文件

VBScript 和批处理交互