Windows 平臺下打包 bzip2 和 gzip 格式壓縮包

Windows 平臺下打包 bzip2 和 gzip 格式壓縮包

問題起因

bzip2 和 gzip 壓縮格式是 Linux 下非常流行的壓縮文件格式,且壓縮率比傳統的 rar 等格式高,因此筆者非常希望能在 Windows 平臺下方便地使用這兩種壓縮文件格式。然而,這兩種格式只是壓縮格式,並不具備歸檔功能,若要壓縮多個文件必須先歸檔,因此使用 7-Zip 工具,配合自己寫的腳本和註冊表,實現從文件夾的右鍵菜單一鍵歸檔並壓縮。(本文附腳本和註冊表文件)

實現步驟

安裝 7-Zip

7-Zip 官方網站下載最新版本的 7-Zip 安裝包,下載完成後打開安裝包安裝,筆者選擇的安裝位置爲 C:\Program Files\7-Zip\,這個位置你可以根據自己喜好而定,沒有所謂。但是如果安裝路徑和筆者不同,則需要將下文腳本和註冊表文件中的所有出現該路徑的地方替換爲實際的安裝路徑

編寫歸檔壓縮腳本

複製以下腳本,存爲文件 C:\Program Files\7-Zip\dir-gz-bz2.bat,這裏我是存到 7-Zip 的安裝路徑下的,如果你沒有放到和筆者相同路徑和文件名,則下一節添加註冊表項前需要先修改爲真實存儲的路徑

@echo off

echo Now making package %2.tar ...
"C:\Program Files\7-Zip"\7z.exe a %2.tar %2
if not %errorlevel% == 0 (
    echo Failed to pack %2.tar, aborted.
    exit
)

if %1 == gz (
    echo Now compressing package %2.tar to %2.tar.gz ...
    "C:\Program Files\7-Zip\7z.exe" a %2.tar.gz %2.tar
    if not %errorlevel% == 0 (
        echo Failed to compress %2.tar.gz, aborted.
        exit
    )
) else if %1 == bz2 (
    echo Now compressing package %2.tar to %2.tar.bz2 ...
    "C:\Program Files\7-Zip\7z.exe" a %2.tar.bz2 %2.tar
    if not %errorlevel% == 0 (
        echo Failed to compress %2.tar.bz2, aborted.
        exit
    )
)

if not %1 == tar (
    echo Now deleting %2.tar ...
    del %2.tar
)
echo Compressing finished.

腳本的參數如下:

  • 參數 %1:子命令,包括 tar, gzbz2 三種選擇,分別對應僅打包、生成 gzip 格式壓縮包(並刪除歸檔包)和生成 bzip2 格式壓縮包(並刪除歸檔包);
  • 參數 %2:要打包的文件夾路徑

腳本的邏輯如下:

  1. 使用參數 %2%2 代表的文件夾打包爲 tar 格式文件,存爲文件名 %2.tar
  2. 若參數 %1gz,則將 %2.tar 壓縮爲 %2.tar.gz,跳第 4 步;
  3. 若參數 %1bz2,則將 %2.tar 壓縮爲 %2.tar.bz2,跳第 4 步;
  4. 若參數 %1tar,則不刪除 %2.tar,否則刪除;
  5. 結束。

通過添加註冊表加入右鍵菜單

複製以下註冊表項,存爲文件 添加註冊表項.reg,這裏文件名可以隨意,但一定是 .reg 爲擴展名結尾的,如果在前文安裝 7-Zip 或存放壓縮腳本的位置和筆者不同,則需要對註冊表項的路徑做一定修改,使其和真實的路徑相同。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\tar.bz2]
@="添加爲 tar.bz2 壓縮包"
"icon"="\"C:\\Program Files\\7-Zip\\7zG.exe\""

[HKEY_CLASSES_ROOT\Directory\shell\tar.bz2\command]
@="\"C:\\Program Files\\7-Zip\\dir-gz-bz2.bat\" bz2 \"%1\""

[HKEY_CLASSES_ROOT\Directory\shell\tar.gz]
@="添加爲 tar.gz 壓縮包"
"icon"="\"C:\\Program Files\\7-Zip\\7zG.exe\""

[HKEY_CLASSES_ROOT\Directory\shell\tar.gz\command]
@="\"C:\\Program Files\\7-Zip\\dir-gz-bz2.bat\" gz \"%1\""

[HKEY_CLASSES_ROOT\Directory\shell\tar]
@="僅添加爲 tar 歸檔"
"icon"="\"C:\\Program Files\\7-Zip\\7zG.exe\""

[HKEY_CLASSES_ROOT\Directory\shell\tar\command]
@="\"C:\\Program Files\\7-Zip\\dir-gz-bz2.bat\" tar \"%1\""

本註冊表項一共包含 6 個項目,包括 gzip 格式、bzip2 格式和僅歸檔爲 tar 格式各 2 個項目。其中,每個格式的第一條表項是添加右鍵菜單名和設置右鍵菜單中的圖標,後一條表項則是設定腳本文件路徑,以及傳遞給腳本文件的必要參數。

下載地址

如果需要,可以直接從下面的地址下載需要用到的 7-Zip 工具、腳本和註冊表項:
https://download.csdn.net/download/jinhangdev/11037685

總結與展望

許多 Linux 下常用工具能夠在 Windows 下使用能夠便利不少,這個腳本目前有個已知的小缺陷。如果同時選中多個文件夾並不能打包成一個包,而是分別打包並壓縮。這裏的多個文件夾並不是說一個文件夾下的子文件夾不能壓到一個包裏,而是說同時用鼠標選中兩個文件夾後在右鍵菜單選擇壓縮。一個文件夾下的所有文件和子文件夾下的文件是可以壓縮到一個包裏面的。如果本文對你有用,歡迎留下評論或點贊,謝謝支持!

歡迎訪問我的個人主頁.
2019.3.19

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章