如何重新压缩驱动器上的多个 zip 文件?

如何重新压缩驱动器上的多个 zip 文件?

我的硬盘里有很多 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 命令行工具。

相关内容