![从档案中提取哈希值(CRC)和路径名](https://linux22.com/image/1614490/%E4%BB%8E%E6%A1%A3%E6%A1%88%E4%B8%AD%E6%8F%90%E5%8F%96%E5%93%88%E5%B8%8C%E5%80%BC%EF%BC%88CRC%EF%BC%89%E5%92%8C%E8%B7%AF%E5%BE%84%E5%90%8D.png)
我已使用 7-zip 成功提取大型 .rar 存档(1.9TB)中的数据,现在我想删除该存档。但在删除之前,我想保存路径名,最重要的是相应的7-zip 文件管理器中 CRC 列中列出的 CRC 值。
据我所知,执行此操作的唯一方法是通过 cmd.exe 使用以下命令7z l -slt <archive.zip>
。但是,这种方法对我来说效率不高。首先,命令提示符的输出窗口大小有限。我知道我可以调整缓冲区大小(甚至可能最大到 32766),但存档中有超过一百万个文件……然而,更成问题的是,据我所知,这种方法的输出格式无法更改,如下所示:
Path = -
Folder = -
Size = -
Packed Size = -
Modified = -
Created =
Accessed =
Attributes = -
Encrypted = -
Solid = -
Commented = -
Split Before = -
Split After = -
CRC = -
Host OS = -
Method = -
Version = -
Volume Index = -
而我正在寻找的是每个文件的输出,如下所示:
<CRC> <pathname>
例如:
60CD248A *Folder1\text1.txt
61CD248A *Folder1\Folder2\text1.txt
62CD248A *Folder1\Folder2\text2.txt
非常感谢您付出的时间和帮助。
答案1
您可以使用一行命令代码从命令行输出中仅获取 CRC 行:
7z l -slt archive.zip >> "%tmp%\output.txt" && type "%tmp%\output.txt"|findstr /b CRC | clip && del /q /f "%tmp%\output.txt"
CRC - .....
此命令将把7z 命令输出的所有行内容放入剪贴板(Crtl+C) 。
要保存在文件中:
7z l -slt archive.zip >> "%tmp%\output.txt" && type "%tmp%\output.txt"|findstr /b CRC >>"c:\my_folder\my_save_output.txt" && del /q /f "%tmp%\output.txt"
循环(通过“for”)并保存 CRC 字符串:
for /f tokens^=2*^delims^=^ ^-^ %i in ('7z l -slt archive.zip^|findstr /b CRC')do @echo/%i>>"c:\my_folder\my_save_output.txt"
- 我的 7Z 版本输出如下CRC = 字符串,就我而言,分隔符更改为:
for /f tokens^=^2*^delims^=^=^ %i in ('7za l -slt archive.zip ^| find /i "crc"')do @echo/%i>>"c:\my_folder\my_save_output.txt"
观察:1)中间有 2 个空格^=^=
和%i
:
delims^=^= ←→ %i ---> delims^=^=^ %i
观察:2)同样适用于 Path,只需替换CRC到小路。
观察:3)便携版使用的可执行文件是 7za.exe,您可能有其他名称。