如何重新壓縮磁碟機上的多個 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 ~,告訴它要覆蓋 out 目錄中存在的任何現有文件,而不是等待您告訴它這樣做,等等。

在此輸入影像描述

-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 並執行 ReZip(不含該-int選項)。完整的命令列選項集合是:

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 命令列工具。

相關內容