将根文件夹的所有子文件夹及其内容添加到现有 Zip 文件

Add all Subfolders of a root folder and their contents to an existing Zip file

我的目录结构类似于以下内容:

ROOT
  --> Site_01
    --> 2015
        --> 01
             --> more subfolders and files (thousands of log files)
  --> Site_02
    --> 2015
        --> 01
             --> more subfolders and files (thousands of log files)
  --> Site_03
    --> 2015
        --> 01
             --> more subfolders and files (thousands of log files)

在其他地方,我有一个可能存在的 zip 文件,其内容反映了上述文件夹结构。我想做的是编写一个批处理文件,以便将 ROOT 下的所有内容压缩到可能已经存在的 zip 文件中。

如果 zip 文件不存在,我想创建它,如果它存在,我想简单地向其中添加 ROOT 的内容。

到目前为止,我尝试过以下变体:

D:\ROOT>7z -u D:\archive\logs_app.zip *  
D:\ROOT>7z -up2q2r2x2y2z2w2 D:\archive\logs_app.zip *  

我不关心 ROOT 中是否有一个文件已经存在于存档的同一位置 - 已经存档的文件可以简单地被覆盖。因此,根据我对 7Zip's Update Switch 文档的细读,我省略了所有更新选项。但我收到错误:Command Line Error: Too short switch:-u。其次,我认为无论状态如何,我都想压缩文件并将其添加到存档中;该命令给了我这个输出和错误:

7-Zip [64] 9.38 beta  Copyright (c) 1999-2014 Igor Pavlov  2015-01-03

Command Line Error:
Unsupported command:
D:\archive\logs_app.zip

我可以建议你看看我的 zipjs.bat 它不使用任何外部软件并且能够处理 windows.But 下的 zip 文件它太大 post 在这里。

这是一个使用它的脚本(应该在同一个文件夹中)并且可能会解决您的问题 您的文件夹名为 ROOT,但如果需要,您可以更改 name.And 您可以更改 zip

的路径
@echo off

rd ./temp_root >nul 2>&1
md temp_root

call zipjs.bat list -source C:\myZip.zip -flat yes | find /i "myZip.zip\ROOT" >nul 2>&1 && (
    call zipjs.bat unZipItem -source C:\myZip.zip\ROOT -destination ./temp_root -keep no
)
rd ./temp_root >nul 2>&1


call zipjs.bat addToZip -source .\ROOT -destination  C:\myZip.zip 

这是最终对我有用的命令:

D:\ROOT>7z a -tzip "D:\archive\logs_app.zip" * -aoa -mmt

我找到了一个很好的资源,最终帮助我解决了这个问题 here。我最大的问题是我没有注意命令参数和开关的顺序。

1.) 7z a 告诉 7Zip 添加文件。
2.) -tzip 告诉 7Zip 使用标准 zip 格式存档文件,而不是 7Zip 格式或 iso 映像。
3.) "D:\archive\logs_app.zip" 告诉 7Zip 我要向其添加文件的现有存档的路径。
4.) * 告诉 7Zip 我想将任何文件从当前目录添加到现有存档中。
5.) -aoa 告诉 7Zip 用源目录中的任何内容覆盖存档中任何匹配的现有文件。 注意:在许多情况下,这可能很危险;无法恢复被覆盖的文件!
6.) -mmt 告诉 7Zip 使用多线程。这通常会加快处理速度,尤其是当您处理大量文件时。