在zip文件中搜索文字



我有一个带有Oracle BI Publisher Reports

的文件夹
Folder/Usage Trend Report.xdmz
Folder/Usage Summary Report.xdmz
Folder/Charge Trend Report.xdmz
Folder/Consolidation Reports.xdmz
Folder/Charge Summary Report.xdmz

每个报告都像zip文件,包含一些文件

_datamodel.xdm 
~metadata.meta
security.xml

我想制作一个批处理文件,搜索所有_datamodel.xdm文件以找到字面的文件(例如Invoice_NBR或Invoice_nbr)输出将是

Report Name                    Literal        Usages
Consolidation Reports.xdmz     INVOICE_NBR      1   

有没有人可以帮助我做?

谢谢

将来,请展示您试图自己解决问题以及卡住的位置。这次,我发现挑战很有趣,所以我为您筹集了一个开始。这是批处理 PowerShell混合脚本。用.bat的延伸和盐来保存它。建议执行字符串计数的Regexp对象使用 case敏感匹配;因此,搜索" Invoice_nbr"。

<# : batch portion
@echo off & setlocal
set "outerfile=*.xdmz"
set "innerfile=_datamodel.xdm"
set "search=invoice_nbr"
rem // re-launch self with PowerShell interpreter
powershell "iex (${%~f0} | out-string)"
goto :EOF
: end batch / begin PowerShell hybrid chimera #>
add-type -as System.IO.Compression.FileSystem
# // encapsulate loop into a collection for select | format-table
&{ foreach ($archive in (gci $env:outerfile)) {
    # // create a temporary directory within %temp%
    $tempdir = New-Item -path $env:temp -name ([Guid]::NewGuid()) -type dir
    [IO.Compression.ZipFile]::ExtractToDirectory($archive, $tempdir)
    # // For each innerfile found within the zip archive...
    gci -path $tempdir -filter $env:innerfile -recurse | %{
        new-object PSObject -property @{
            "Report Name" = $archive.Name
            "Usages" = ([regex]::Matches((gc $_.FullName | out-string), $env:search)).count
            "Literal" = $env:search
        }
    }
    Remove-Item $tempdir -recurse -force
} } | select "Report Name",Literal,Usages | format-table -auto

示例输出:

Report Name               Literal     Usages
-----------               -------     ------
Usage Summary Report.xdmz invoice_nbr      2
Usage Trend Report.xdmz   invoice_nbr      2

如果您想要case- 敏感的匹配中,请将以下作为第三个参数添加到[regex]::Matches()函数:

[Text.RegularExpressions.RegexOptions]::IgnoreCase

最新更新