我的目录结构类似于以下内容:
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
答案 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使用多个线程。这通常会加快这个过程,特别是当你处理大量文件时。