在 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>