我正在编写一个批处理脚本,需要计算编号。文件中的行数。我目前正在使用下面的代码来查找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搜索。