0

我正在研究一个需要计算编号的批处理脚本。文件中的行数。我目前正在使用下面的代码来查找编号。的行。

set "cmd=findstr /R /N "^^" File_name.txt | find /C ":""
for /f %%a in ('!cmd!') do set nooflines=%%a

如果文件以 zip 格式压缩,如何实现相同的效果?我们可以绕过解压缩文件并计算编号吗?行数(对于 linux,我们使用 zcat)?

4

1 回答 1

0

zcat 实用程序仅适用于 gzip 或 gunzip 压缩文件。它使用 tar 压缩技术工作。

Windows 也有一个 tar 命令,它的使用更加有限,但是它可以列出文件名,因此我们可以立即按文件名搜索 zips 内容而无需扩展。

C:\Users\My\Downloads>tar -tf xpdf-tools-win-4.03.zip xpdf* | find "pdft"

xpdf-tools-win-4.03/bin32/pdftopng.exe
xpdf-tools-win-4.03/bin32/pdftoppm.exe
xpdf-tools-win-4.03/bin32/pdftohtml.exe
xpdf-tools-win-4.03/bin32/pdftotext.exe
xpdf-tools-win-4.03/bin32/pdftops.exe
xpdf-tools-win-4.03/bin64/pdftopng.exe
xpdf-tools-win-4.03/bin64/pdftoppm.exe
xpdf-tools-win-4.03/bin64/pdftohtml.exe
xpdf-tools-win-4.03/bin64/pdftotext.exe
xpdf-tools-win-4.03/bin64/pdftops.exe
xpdf-tools-win-4.03/doc/pdftoppm.txt
xpdf-tools-win-4.03/doc/pdftopng.txt
xpdf-tools-win-4.03/doc/pdftops.txt
xpdf-tools-win-4.03/doc/pdftotext.txt
xpdf-tools-win-4.03/doc/pdftohtml.txt

C:\Users\My\Downloads>

使用 Windows GUI 搜索,您可以在包含“Fred”的 zip 中找到所有这些文件,如果这些文件没有预先编制索引,它可能看起来很慢。

任何压缩格式都可以通过扩展库在内存中“膨胀”。使用 7za 或类似软件来扩展档案会简单得多。甚至 VBS 脚本和 powershell 也可以从压缩文件扩展为临时文件或文件夹(blob 或 RAM 磁盘对一个 zip 文件的文件缓存提供的价值很小),然后使用 find 解析那些 %temp%orary 文件。

Unzip2test.vbs 文件名.zip


ZipFile = WScript.Arguments.Unnamed(0)
ExtractTo ="c:\temp\test"

Set fso = CreateObject("Scripting.FileSystemObject")
sourceFile = fso.GetAbsolutePathName(ZipFile)
destFolder = fso.GetFolder(ExtractTo)
 
Set objShell = CreateObject("Shell.Application")
Set FilesInZip=objShell.NameSpace(sourceFile).Items()
objShell.NameSpace(destFolder).copyHere(FilesInZip), 16
 
Set fso = Nothing
Set objShell = Nothing
Set FilesInZip = Nothing

然后将 xpdf-tools-win-4.03.zip 放到这个 xpdfrColons.cmd 文件中

@echo off
Unzip2test.vbs %1
for /R "c:\temp\test" %%a in (xpdfr*.txt) do @type %%a | find /c ":" 
pause

将显示为

17

press any key ...

有一些 zip 提取器可以非常快速地在 zip 文件中搜索字符串,比 Windows 搜索快得多。使用命令行工具的专用 zipfile 索引可以解决 windows 单词搜索的问题。

于 2021-08-08T01:16:57.123 回答