7z 命令行参数详解与常用示例
7-Zip 的命令行版本 7z 能完成图形界面的全部操作,并且可以写进脚本。以下按“语法 → 命令 → 开关 → 示例 → 退出码”的顺序说明,示例可直接复制、改路径后使用。
基本语法
7z <命令> [<开关>...] <压缩包名> [<文件或目录>...]
命令决定“做什么”,开关决定“怎么做”,压缩包名在前,待处理文件在后。开关可以放在命令后的任意位置,但路径含空格时必须加引号。
三条容易踩的规则
-o(输出目录)与-p(密码)必须与值紧连,中间不能有空格:-o"D:\out"、-pMyPass。- 其它开关与值之间用等号:
-mx=9、-mhe=on。 - Windows 下反斜杠路径要加引号,避免被命令解释器当作转义符。
六个核心命令
日常 90% 的操作只用得到这六个,其余命令(b 基准测试、h 哈希、i 环境信息、rn 重命名)按需查阅官方帮助。
| 命令 | 作用 | 典型写法 |
|---|---|---|
a |
添加文件到压缩包,压缩包不存在时创建 | 7z a backup.7z ./docs |
x |
解压并保留目录结构 | 7z x backup.7z -o./out |
e |
解压到同一层,丢弃目录结构 | 7z e backup.7z -o./flat |
l |
列出压缩包内容,不解压 | 7z l backup.7z |
t |
测试完整性,校验 CRC | 7z t backup.7z |
d |
从压缩包中删除指定文件 | 7z d backup.7z old.log |
x 与 e 的差别只在目录结构。批量处理散装文件时 e 更方便,但同名文件会被覆盖,需谨慎。
常用开关
按使用频率排序。完整列表可在安装目录执行 7z -h 查看,或参考官方文档。
| 开关 | 含义 | 说明 |
|---|---|---|
-o{dir} | 输出目录 | 紧连写法,目录不存在会自动创建 |
-p{password} | 密码 | 只写 -p 会提示交互输入,更安全 |
-y | 全部确认 | 跳过覆盖等交互提示,适合脚本 |
-r | 递归子目录 | 与通配符配合使用 |
-mx=0…9 | 压缩级别 | 0 仅打包,5 默认,9 最高 |
-m0=lzma2 | 指定压缩方法 | 7z 格式常用 lzma2、lzma、bzip2、ppmd |
-mhe=on | 加密文件名 | 仅 7z 格式支持,未给密码时看不到列表 |
-v{size} | 分卷大小 | 如 -v100m、-v2g |
-x!{pattern} | 排除文件 | 如 -x!*.tmp |
-i!{pattern} | 仅包含匹配文件 | 与 -x 相反 |
-t{type} | 指定压缩包类型 | 如 -tzip、-t7z |
-sfx | 生成自解压包 | 需要 7z.sfx 模块,输出 .exe |
-aoa | 覆盖所有同名文件 | 另有 -aos 跳过、-aou 自动改名 |
-w{dir} | 临时目录 | 压缩大文件时可指向空间充足的磁盘 |
-bb3 | 详细日志 | 输出每个被处理的文件,便于排查 |
12 个可直接使用的示例
示例使用 Windows 路径写法,Linux 与 macOS 把路径换成 /home/user/... 即可,参数不变。
1. 把文件夹压成 7z
7z a -t7z "D:\backup\docs.7z" "D:\work\docs" -mx=5
2. 最高压缩率归档
7z a -t7z -mx=9 -m0=lzma2 "D:\backup\docs-ultra.7z" "D:\work\docs"
级别 9 更吃 CPU 与内存,压缩时间明显增加;日常归档用 5 更均衡。
3. 只压某类文件并递归子目录
7z a "D:\backup\sheets.7z" "D:\work\*.xlsx" -r
4. 排除临时文件与缓存目录
7z a "D:\backup\project.7z" "D:\work\project" -x!*.tmp -x!node_modules -x!.git
5. 解压到指定目录
7z x "D:\downloads\docs.7z" -o"D:\docs" -y
6. 只解压包内某一个文件
7z x "D:\downloads\docs.7z" "config\app.ini" -o"D:\temp"
包内路径用压缩包中的相对路径,先用 7z l 确认准确写法。
7. 查看内容与测试完整性
7z l "D:\downloads\docs.7z"
7z t "D:\downloads\docs.7z"
8. 加密并隐藏文件名
7z a -t7z -p -mhe=on "D:\backup\secret.7z" "D:\work\secret"
-p 后不写密码,7-Zip 会交互式提示输入,避免密码留在命令历史里。详见 7z 加密与密码。
9. 生成 100 MB 分卷
7z a -v100m "D:\backup\pack.7z" "D:\work\bigfolder"
输出为 pack.7z.001、pack.7z.002…,解压时只打开第一个。详见 分卷压缩与合并。
10. 生成自解压程序
7z a -sfx "D:\backup\setup.exe" "D:\work\portable"
需要 7-Zip 安装目录中的 7z.sfx 模块,否则会报错。自解压包体积比 7z 大约多出模块本身的大小。
11. 计算 SHA-256 校验值
7z h -scrcSHA256 "D:\downloads\7z2606-x64.exe"
用于与官方发布记录中的摘要比对。CRC32、SHA-1 把参数换成 -scrcCRC32、-scrcSHA1 即可。
12. 解压单个文件到标准输出
7z x -so "D:\downloads\docs.7z" "readme.txt" > "D:\temp\readme.txt"
-so 不写磁盘,适合只读取内容或做管道处理。
退出码与批处理判断
脚本里不要只看“有没有输出”,用退出码判断更可靠。
| 退出码 | 含义 | 脚本中的处理建议 |
|---|---|---|
| 0 | 成功,无错误 | 继续 |
| 1 | 有警告,部分文件未处理 | 记录日志并继续,事后检查 |
| 2 | 发生错误 | 中止并告警 |
| 7 | 命令行参数错误 | 修正脚本 |
| 8 | 内存不足 | 降低 -mx 或字典大小 |
| 255 | 用户中断 | 清理残留文件 |
Windows 批处理用 if errorlevel 2 判断“大于等于 2”,注意顺序;PowerShell 用 $LASTEXITCODE;Bash 用 $?。
Windows、Linux、macOS 的差异
参数语法一致,差别主要在可执行文件名与可选功能。
Windows
可执行文件为 7z.exe,默认安装路径 C:\Program Files\7-Zip。支持自解压包、Windows Shell 集成与文件关联。
Linux
官方 tar.xz 包内为 7zz,需自行放到 PATH 目录。不含图形界面,也没有自解压模块。
macOS
同样为命令行版本,可执行文件为 7zz。首次运行可能被 Gatekeeper 拦截,需在“隐私与安全性”中允许。
常见问题
7z 和 7za、7zz 有什么区别?
三者都是 7-Zip 的命令行程序,但来源不同:Windows 安装包内是 7z.exe;7za 是旧版独立版可执行文件,格式支持较少;7zz 是官方 Linux 与 macOS 包内使用的可执行文件名。参数语法一致,具体支持范围以对应版本说明为准。
为什么 -o 和 -p 后面不能加空格?
7-Zip 把这两个开关设计为“开关+值”的紧连写法,-o 后直接跟目录,-p 后直接跟密码。写成 -o "D:\out" 会被解析成两个独立参数,导致输出到默认位置或直接报错。
怎么让 7z 只压缩某种类型的文件?
用通配符加递归参数,例如 7z a backup.7z "D:\project\*.docx" -r。需要排除某些文件时用 -x,例如 -x!*.tmp。通配符由 7-Zip 自行解析,建议给路径加引号以避开命令行自身的展开。
7z 的退出码怎么判断成功?
退出码 0 表示成功;1 表示有警告(例如部分文件被占用而跳过);2 表示发生错误;7 表示命令行参数错误;8 表示内存不足;255 表示用户中断。批处理中应以 0 或 1 作为可接受结果。
压缩时提示“文件被另一进程使用”怎么办?
说明文件正被其他程序打开。可以关闭占用程序,或加 -ssw 让 7-Zip 尝试压缩正在写入的文件(可能得到不一致的内容)。数据库、虚拟机磁盘这类文件不建议在运行中压缩。
Linux 上装了 7-Zip,为什么输入 7z 提示找不到命令?
官方 tar.xz 包解压后得到的可执行文件是 7zz,需要把它放到 PATH 包含的目录(例如 /usr/local/bin),或使用完整路径调用。部分发行版仓库里的 7z 来自 p7zip,属于另一个实现,参数虽相似但版本较旧。