用程序写个支持解压多种格式的解压工具,不是那么容易,不过有个工具非常好用。Bandizip 是一个强大的多功能压缩文件管理工具,可提供高速的解压缩速度和其他各种实用功能。当然也可以用命令行去调用参数去压缩和解压。
比如说,如果有个密码集,可以去不断的尝试解压,这就挺好用的。
下载bandizip后, 此软件默认设置了环境变量, 可以直接使用bandizip命令。
命令行参数
以下都以windows进行举例
Bandizip有两个可执行程序,一般来说bz.exe
会比较好用,因为它是专门是用于控制台里使用的,所以有更多的适配参数可以调用。
- Bandizip (Bandizip.exe)
Bandizip.exe <archive>
Bandizip.exe <command> [<switches>...] <archive> [<files>...] [<path_to_extract>]
Bandizip.exe <bcommand> [<switches>...] [<files>...]
- 控制台应用程序(bz.exe)
bz.exe <command> [<switches>...] <archive> [<files>...] [<path_to_extract>]
名称 | 意义 | 参数 |
---|---|---|
<archive> | 档案 | 【执行在设置中指定的操作。(通常会打开档案。)】 |
<command> | 命令 | a 【添加文件到档案】x 【用完整路径提取文件】 t 【测试档案的完整性】d 【从档案中删除文件】c 【创建新档案(或覆盖现有文件)】cd 【显示“新建档案”对话框】rn 【重命名档案内文件】l 【列出档案中的文件(仅用bz)】 |
<bcommand> | 批处理命令 | bc 【要压缩的每个文件/文件夹名称。 若存在同名档案,则以“(档案名)(2)”格式创建档案。若未指定目标文件夹,则默认目标文件夹为原始文件或文件夹所在的路径。】bx 【将每个档案分别提取到目标文件夹中。 若未指定目标文件夹,则默认目标文件夹为每个档案所在的路径】 bt 【测试每个档案的完整性】 |
<switches> | 开关 | - 【不使用开关】-l:<0...9> 【设置压缩级别(0:存储,5:默认,9:最大)】 -r- 【禁用递归(默认)】-r 【启用递归子目录】-aoa 【无需提示覆盖全部现有文件】-aos 【跳过且不覆盖已有文件】-aou 【自动重命名已提取文件(例如,name.txt→name (2).txt)】-sfx:"stub path" 【创建SFX档案并设置SFX STUB的完整路径(Bandizip c -sfx:“C:\Program Files\Bandizip\bdzsfx.x86.sfx” c:\out.exe c:\src.txt)】-zopfli 【使用Zopfil作为默认编码器(慢)】 -p:password 【设置档案密码】-o:dir 【指定目标文件夹仅适用于 x 命令和批处理命令 (bc, bx, bt)】-storeroot:yes 【将根目录存储为档案的顶级文件夹】-y 【所有询问都为是,若无错误发生,则在任务完成时关闭(解)压缩窗口】-ex:list 【指定压缩时被排除在外的一列文件(-ex:hello.txt、-ex:".bak"、-ex:".bak;.tmp"、-ex:.git)】-root:dir 【指定压缩时档案中的根目录(-root:top_folder)】-fmt:fmt 【指定档案格式(zip, zipx, exe, tar, tgz, lzh, iso, 7z, gz, xz)】-v:size 【指定分卷大小(-v:1000000 -v:1440k -v:100MB …)】-cmt:comment 【设置ZIP文件注释(-cmt:Hello, -cmt:“Hello World!”)】-cmtfile:filepath 【指定用作ZIP文件注释的txt文件的路径(-cmtfile:mycomment.txt, -cmtfile:“c:\test\my comment.txt”)】-t:NN 【指定压缩时使用的 CPU 线程数(-t:10, -t:1, -t:0)】-cp:NN 【指定打开或解压文件时使用的代码页(Bandizip x -cp:932 japanese.zip),可用代码页举例(- Chinese Simplified: 936、- Chinese Traditional: 950、- Japanese: 932、- Korean: 949、- UTF-8: 65001)】-target:auto 【“使用自动解压功能将文件提取到目标文件夹。若未指定目标文件夹,则将文件提取到每个档案所在的文件夹中。“】-target:name 【“将文件提取到目标文件夹中的档案名文件夹内。若未指定目标文件夹,则将文件提取到每个档案所在文件夹中的档案名文件夹内】-date 【将当前系统时间插入文件路径】 |
<Switches>(仅用Bandizip) | 开关 | -email 【压缩并用邮件发送】-target:dlg 【“显示一个对话框以指定目标文件夹,并将文件提取到目标文件夹中的 档案名 文件夹中。若使用 -o 指定了任何文件夹,则它是对话框的默认文件夹。“】 |
<switches>(仅用bz) | 开关 | -list:v 【使用命令 l 时,显示文件的详细信息】-list:s 【使用命令 l 时,仅显示文件名】 -consolemode:ansi 【以ANSI格式保存输出txt文件】-consolemode:utf8 【以UTF-8格式保存输出txt文件】 |
举例
package main
import (
"log"
"os/exec"
)
// 解压带密码的压缩包
func main() {
const bandizip = `E:\Bandizip\Bandizip.exe`
const bz = `E:\Bandizip\bz.exe`
cmd := exec.Command(bz, `x`, `-o:D:\test\`, `-p:123456`, `D:\test.zip`)
execErr := cmd.Run()
if execErr != nil {
log.Printf("[ERROR] fail to decompress file, error:%v\n", execErr)
}
}
巨人的肩膀
从他人的工作中汲取经验来避免自己的错误重复,正如我们是站在巨人的肩膀上才能做出更好的成绩。
https://cn.bandisoft.com/bandizip/help/parameter/
VChat
一个没有哆啦A梦和静香的IT码农,不专业Gopher