为了通过命令行从多个 ZIP 文件中提取和合并文本文件,我需要做什么?

为了通过命令行从多个 ZIP 文件中提取和合并文本文件,我需要做什么?

我面临一个有趣的脚本编写挑战。我非常确定一定有办法完成它,但我觉得我可能缺少一些特定的工具和/或功能知识。

有五十多个 ZIP 文件,每个文件都包含需要相互合并的文本文件等。结构如下:

C:\Reports\FirstJob-1.zip  
|-MyName  
  |-FirstJob
    |-1
      |-[Some other folders]
      |-TXTReports
        |-English
          |-[Some other files]
          |-Report.txt  

C:\Reports\FirstJob-2.zip  
|-MyName  
  |-FirstJob
    |-1
      |-[Some other folders]
      |-TXTReports
        |-English
          |-[Some other files]
          |-Report.txt 

C:\Reports\SecondJob-1.zip  
|-MyName  
  |-SecondJob
    |-1
      |-[Some other folders]
      |-TXTReports
        |-English
          |-[Some other files]
          |-Report.txt

如果我把所有Report.txt文件都放在一个常规文件夹中,并且使用唯一的名称,我可能只需编写一个 FOR 语句,针对每个文件*.txt并运行类似的操作即可type filename.txt >> Consolidated.txt。但是,这些文件都具有相同的文件名,并且深深嵌入在单独的 ZIP 文件中。

我目前可以使用的潜在有用工具是 Windows XP Professional SP3、PowerShell 和 WinZip。我不想下载或安装任何其他东西,但我知道第三方工具(或来自 Microsoft 或 WinZip 的其他工具)可能是必要的。无论我使用什么工具,都应该在 Windows 中本地运行。我真的不想在这个系统上使用 Cygwin 或其他模拟器。

至少,我需要一个允许我从命令行分析和操作 ZIP 文件的工具。此外,还有其他我尚未想到的特殊复杂因素吗?

答案1

Info-ZIP 的 UnZip(Windows 二进制文件这里)可让您使用 来从命令行提取 zip 文件unzip -x。 剩下的就是查找和连接文件,例如:

find . -name Report.txt -print0 | xargs -0 cat > Consolidated.txt

以上是 Unix 命令,您可以在以下任一位置找到赛格威或者操作系统

潜在的影响是,如果您有很多文件,xargs 命令会变得太长,如果文件很大,您可能会耗尽磁盘空间(您可以通过逐个解压缩和连接文件来解决这个问题,在解压每个文件后删除解压的存档文件夹)。

答案2

我可以建议另一种选择吗?如果您使用的是 Windows XP,那么您也可以使用 VBScript。几年前,我写了一系列文章,演示了如何利用 WSH 中的 VBScript 来创建和操作 zip 文件,并使用 Windows XP 内置的压缩​​文件夹支持。您应该试一试。您的脚本不会有任何第三方依赖项,并且编写文件系统逻辑脚本非常简单。

WSH 中的压缩文件夹

了解 CompressedFolder 类

实现 CompressedFolder 类

简而言之,可以使用 Shell 对象的 Namespace 方法将 zip 文件作为压缩文件夹打开。这与使用 Windows 资源管理器像浏览目录一样浏览它们本质上是相同的。

相关内容