使用批处理脚本,我们如何在不解压缩的情况下找到压缩/压缩文件的行数?



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

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

如何实现相同的情况下,文件被压缩在zip格式?我们能不能不解压缩文件,不计算编号?

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

Windows还有一个tar命令,它的使用更有限,但是它可以列出文件名,这样我们就可以立即通过文件名搜索压缩文件的内容,而不需要展开。

C:UsersMyDownloads>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:UsersMyDownloads>

使用windows GUI搜索,您可以找到zip中包含"Fred"的所有文件。如果文件没有预先索引,它可能看起来很慢。

任何压缩格式都可以"膨胀";在内存中使用扩展库。使用7za或类似的方法来扩展存档要简单得多。即使VBS脚本和powershell也可以从压缩文件扩展到临时文件或文件夹(blob或RAM磁盘比一个zip文件的文件缓存提供的价值很小),然后使用find.

解析这些%temp%orary文件。

Unzip2test。根据filename.zip


ZipFile = WScript.Arguments.Unnamed(0)
ExtractTo ="c:temptest"
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:temptest" %%a in (xpdfr*.txt) do @type %%a | find /c ":" 
pause

显示为

17
press any key ...

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

最新更新