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
,gz
和bz2
三种选择,分别对应仅打包、生成 gzip 格式压缩包(并删除归档包)和生成 bzip2 格式压缩包(并删除归档包); - 参数
%2
:要打包的文件夹路径
脚本的逻辑如下:
- 使用参数
%2
将%2
代表的文件夹打包为tar
格式文件,存为文件名%2.tar
; - 若参数
%1
为gz
,则将%2.tar
压缩为%2.tar.gz
,跳第 4 步; - 若参数
%1
为bz2
,则将%2.tar
压缩为%2.tar.bz2
,跳第 4 步; - 若参数
%1
为tar
,则不删除%2.tar
,否则删除; - 结束。
通过添加注册表加入右键菜单
复制以下注册表项,存为文件 添加注册表项.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