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

时间:2015-01-28 19:36:51

标签: batch-file zip 7zip

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

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

2 个答案:

答案 0 :(得分:0)

我可以建议您查看我的zipjs.bat 它不使用任何外部软件,并且能够在windows下处理zip文件。但它太大了,不能在这里发布。

这是一个使用它的脚本(应该在同一个文件夹中),可能会解决您的问题 您的文件夹名为ROOT,但如果您需要,可以更改名称。您可以更改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 

答案 1 :(得分:0)

这是最终为我工作的命令:

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使用多个线程。这通常会加快这个过程,特别是当你处理大量文件时。