7-Zip 怎么只输出归档文件名并保留路径中的空格
来源:17golang原创
时间:2026-11-11 05:14:35 147浏览 收藏
如果只是想把 7-Zip 归档里的路径交给后续脚本,最容易踩的坑是把普通列表按空格切列。7z l -ba 会去掉表头和表尾,但正文仍是固定列宽;更稳妥的做法是使用 7z l -slt -ba,只提取每个条目的 Path = 字段。这样 docs/release notes final.txt 会作为一整行保留下来。
官方地址:https://7-zip.org/
本文只处理归档清单、裸输出和路径解析,不涉及解压覆盖策略。Windows 示例使用 7z.exe,macOS/Linux 示例把程序名换成 7zz 即可。
先从 7-Zip File Manager 确认归档入口
先打开 7-Zip File Manager,选择目标归档并确认中央列表能看到文件项。入口路径可以是“File → Open”,也可以直接把归档拖进窗口;关键是先确认归档本身可读,再把同一个路径交给命令行。

在这个阶段只核对三件事:窗口标题对应目标归档、文件列表出现预期条目、路径中的空格没有被界面截成多个字段。确认后再进入命令行输出。
用 l -ba 去掉表头,但不要按空格切列
l 是列出归档内容,-ba 是 bare output,用来隐藏表头和表尾。它适合让输出更紧凑,但每一行仍可能包含日期、时间、属性、大小和路径等固定列。下面的命令可以先观察裸列表:
# -ba 只去掉表头表尾;归档路径整体加引号,避免外层路径中的空格被 Shell 拆开
7z.exe l -ba "D:\Archives\release bundle.7z"
不要把结果直接写成“按空格取第 6 列”。文件名本身可以包含空格,固定列中的连续空格也可能让简单的 split 或 tokens 方案失效。若只需要给人看,裸列表够用;若要交给脚本,继续使用结构化输出。
用 l -slt -ba 按 Path 字段提取文件名
-slt 会把每个条目展开为字段块,-ba 负责去掉额外的头尾信息。解析时只删除固定前缀 Path = ,不会触碰路径中间的空格。
# 逐条读取 -slt 字段块,保存 Path 和 Attributes,避免按空格切分文件名
$path = $null
$isDirectory = $false
$lines = & 7z.exe l -slt -ba "D:\Archives\release bundle.7z"
foreach ($line in $lines) {
if ($line -eq '') {
# 空行表示一个条目结束,只输出非目录项
if ($path -and -not $isDirectory) { $path }
$path = $null
$isDirectory = $false
continue
}
if ($line.StartsWith('Path = ')) {
# 只去掉字段名前缀,路径内部的空格保持原样
$path = $line.Substring(7)
continue
}
if ($line.StartsWith('Attributes = ')) {
# 目录属性含 D,后续不把目录当作文件名输出
$isDirectory = $line -match 'D'
}
}
# 处理输出末尾没有空行的最后一个条目
if ($path -and -not $isDirectory) { $path }
如果目录项也需要保留,可以去掉 $isDirectory 判断;如果只想快速得到所有 Path,也可以把结构化输出交给 awk:
# macOS/Linux 使用 7zz;只匹配 Path 字段,不按空格切列
7zz l -slt -ba "backup with spaces.7z" |
awk '/^Path = / {sub(/^Path = /, ""); print}'

用可见状态验收输出
运行脚本后,把结果按下面的状态核对:
- 输出中没有 7-Zip 的表头、表尾或字段名,只有一行一个文件路径。
docs/release notes final.txt等带空格路径仍是一整行,没有被拆成多个字段。- 使用目录过滤脚本时,
Attributes = D的目录项不会出现在最终清单。 - 如果归档文件名本身包含空格,命令行中的归档路径仍被一对引号包住。
这套判断能区分两个问题:-ba 负责减少展示噪声,-slt 和字段解析负责让脚本知道每个值的边界。不要把“输出看起来少了表头”误认为“输出已经适合按空格切列”。
常见问题
为什么用了 -ba,文件名还是不能直接 split?
因为 -ba 只隐藏表头和表尾,不会把固定宽度表格变成转义后的 CSV。路径中有空格时,应读取 -slt 的 Path = 字段。
为什么结果里还有目录?
归档清单同时描述文件和目录。解析 Attributes = ,把含 D 的条目过滤掉,就能只输出文件项;如果目录本身也是业务输入,则不要做这一步。
Windows 和 macOS/Linux 的命令是否一样?
参数组合相同,主要差别是程序名和管道工具:Windows 常用 7z.exe 与 PowerShell,macOS/Linux 的官方控制台程序使用 7zz,示例中的路径引号和字段提取思路不变。
最终可以记住一句话:给人看的列表用 l -ba,给脚本读取的文件名用 l -slt -ba,按字段前缀提取而不是按空格切分。
-
426 收藏
-
412 收藏
-
109 收藏
-
386 收藏
-
269 收藏
-
319 收藏
-
479 收藏
-
174 收藏
-
223 收藏
-
181 收藏
-
327 收藏
-
439 收藏
-
299 收藏
-
415 收藏
-
289 收藏
-
193 收藏
-
339 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习