我的硬盘里有很多 ZIP 文件,里面是各种备份。这些文件是在不同时间点以不同且不一致的方式压缩的,其中很多文件都使用了最低压缩设置。
有没有办法(最好使用 7zip)使用相同(最佳)压缩设置重新压缩驱动器上的所有 ZIP?
答案1
下面是我过去使用过的类似任务的脚本,成功率 100%,纯批处理7Zip您可以在其中明确指定源目录,它可以是驱动器号或文件夹。
这也允许您明确指定初始根临时目录,然后在其中创建一个与 zip 文件的名称减去 zip 扩展名相匹配的新文件夹,然后在7Zip归档操作已完成,每个 zip 文件对于/F循环迭代处理。
脚本
您只需在脚本顶部将、和变量的值设置为您的环境中所需的值,其余部分就可以Src=
正常ExtractDir=
工作。z7=
您可以指定任何内容7Zip 压缩方法您需要在开关%z7% a ~
之后的命令末尾立即执行该操作以满足您的需求。-aoa
-aoa -m<method_parameters>
要作为批处理脚本运行,请将逻辑保存到文本文档在您的桌面等处,就像<something>.cmd
从文本文档中一样文件 | 保存选项。保存后,只需双击它即可执行逻辑(或右键单击以管理员身份运行),然后确认文件已按预期进行操作。
@ECHO ON
SET Src=X:\
SET ExtractDir=%Src%\tmpExtract007
SET z7="C:\Program Files\7-Zip\7z.exe"
FOR /F "usebackq tokens=*" %%a IN (`DIR /S /B /A-D "%Src%\*.zip"`) DO (
IF NOT EXIST "%ExtractDir%\%%~Na" MD "%ExtractDir%\%%~Na"
ECHO A | %z7% e "%%~Fa" -o"%ExtractDir%\%%~Na" -r
%z7% a "%%~Fa" "%ExtractDir%\%%~Na\*" -aoa
RD /Q /S "%ExtractDir%\%%~Na"
)
PAUSE
EXIT
请注意命令ECHO A |
前面的%z7% e ~
告诉它覆盖输出目录中存在的任何现有文件,而不是等待您告诉它这样做,等等。
-aoa
另外,请注意命令末尾开关的使用%z7% a ~
,该开关告诉它覆盖您正在压缩的 zip 文件内的所有现有文件,以替换其中的所有原始文件,而无需事先实际删除整个原始 zip 文件,如果需要,可以通过一行额外的代码将其添加到此脚本中,非常简单IF EXIST "%%~Fa" DEL /Q /F "%%~Fa"
。
更多资源
答案2
这是一个常规命令提示符()的简单脚本cmd.exe
,可以为您执行此操作:
set ZIP7="C:\Program Files\7-Zip\7z.exe"
for %z in (*.zip) do (
mkdir tmp
cd tmp
%ZIP7% x ..\%z
%ZIP7% a ..\%z.7z -r -mx9 *
cd ..
rmdir /s /q tmp
)
首先,ZIP7
使用 的路径定义变量7z.exe
。然后for
遍历当前目录中的所有 zip 文件。每个 zip 文件都会被提取到tmp
目录中,然后使用 7-Zip 以最大压缩率(-mx9
选项)重新压缩。
您可以将这些命令放入批处理文件中。在这种情况下,%
在for
-loop 变量中使用 double。也就是说,使用%%z
而不是%z
。
答案3
ReZip 免费软件可以完成以下工作:zipada55-bin-win32.zip。首先,该rezip -comp -int archive.zip
命令无需进一步安装即可完成工作。为了获得更好的压缩效果,您需要下载 zip、7z、kzip、advzip 并运行不带该-int
选项的 ReZip。完整的命令行选项集为:
Options: -defl : repack archive only with the Deflate
subformat (most compatible)
-fast_dec : repack archive only with fast decompressing subformats
-int : use internal Zip-Ada algorithms only, no external call
-touch : set time stamps to now
-lower : set full file names to lower case
-del_comm : delete comment
-comp : compare original and repacked archives (paranoid mode)
-rs=n : loop many times over a single compression approach
having randomization, and keep optimum when size is
stable after n attempts in a row
答案4
编写一个 PowerShell 脚本,查找硬盘上的所有 zip 文件,对于找到的每个 zip 存档,提取所有文件并以所需的格式再次压缩它们。
您可以使用内置 ZIP 函数或从 PowerShell 调用 7zip 命令行工具。