我有一個硬碟驅動器,其中包含許多各種備份的 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 命令列工具。