【问题标题】:Using batch script, how can we find the line count of a zipped/compressed file without unzipping it?使用批处理脚本,我们如何在不解压缩的情况下找到压缩/压缩文件的行数?
【发布时间】:2021-08-07 16:11:56
【问题描述】:

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

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

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

【问题讨论】:

    标签: batch-file cmd line-count


    【解决方案1】:

    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 搜索,您可以在 zip 中找到所有包含“Fred”的文件,如果这些文件没有预先编制索引,可能会显得很慢。

    任何压缩格式都可以通过扩展库在内存中“膨胀”。使用 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 单词搜索的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 2011-12-30
      • 2022-07-27
      相关资源
      最近更新 更多