使用 7z l 命令搜索 7z 存档仅返回文件夹

使用 7z l 命令搜索 7z 存档仅返回文件夹

在 Windows 10 上,我有一个 7z 存档,其中包含大约 300 个顶级文件夹,每个文件夹包含大约 20-30 个文本文件。我想使用 powershell 中的 7z list 命令搜索某些文件夹名称,但结果总是包含文件夹名称和文件名。有没有办法让结果只显示文件夹而不显示文件?我已阅读 7z 文档,并尝试使用 -i、-x 和 -r 等各种开关来获得我想要的结果,但到目前为止还没有成功。我总是在列表中得到文件夹和文件,或者什么也得不到。

我想我总是可以提取档案并在 Windows 资源管理器中进行搜索,但我真的不想每次都这样做。

答案1

我想使用 powershell 中的 list 命令搜索7z某些文件夹名称

这是一个批处理文件解决方案。请随意将其转换为 PowerShell(这应该不太难)。

@echo off
setlocal enabledelayedexpansion
for /F "tokens=6" %%d in ('c:\apps\7-zip\7z l -ba test.7z ^| findstr /c:"D...."') do (
   echo %%d
   )
endlocal

重要的是命令-be上的标志7z(这是一个非文档开关)。这会将列表格式更改为如下所示的内容:

F:\test>c:\apps\7-zip\7z l -ba test.7z
2019-11-19 21:13:50 D....            0            0  test
2020-04-02 10:31:49 D....            0            0  test\colors
2020-04-06 23:32:17 D....            0            0  test\colors\colors
2020-04-16 21:20:02 D....            0            0  test\sub 1
2021-12-26 19:26:10 D....            0            0  test\sub 1\test.bat
2020-04-16 21:20:00 D....            0            0  test\sub 2
2021-04-30 19:37:15 D....            0            0  test\txt
2021-01-27 18:40:08 ....A            0            0  test\1.mp4
2021-01-02 16:07:34 ....A            0            0  test\2.mp4
2021-01-02 16:07:34 ....A            0            0  test\3.mp4
2020-04-16 21:07:16 ....A            0            0  test\Apr
2020-04-06 23:32:29 ....A            0            0  test\colors\colors\blue.txt
2020-04-06 23:32:29 ....A            0            0  test\colors\colors\green.txt
2020-04-06 23:32:29 ....A            0            0  test\colors\colors\red.txt
2020-04-06 23:44:29 ....A            0            0  test\colors\colors\sky blue pink.txt
etc ...

输出首先列出目录,然后列出文件。

目录包含标记(列)3 中的字符串D....,因此您可以对此进行过滤。目录名称位于标记(列)6 中。

一旦有了目录名称,您就可以再次过滤以找到所需的名称。

示例输出:

F:\test>test
test
test\colors
test\colors\colors
test\sub
test\sub
test\sub
test\txt
F:\test>

进一步阅读

相关内容