You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pentaho PDI中从多个.tgz文件提取XML文件

解决批量从.tgz文件提取XML的问题

嘿,我碰到过类似的问题!你用的应该是Microsoft Log Parser吧?它的tgz:前缀确实不直接支持通配符批量匹配文件,因为这类语法通常只接受单个文件路径,不会自动解析通配符。下面给你两种可行的解决方案:

方案1:用命令行循环逐个处理(适合Windows环境)

Windows CMD 命令

如果你习惯用CMD,可以用for循环遍历所有匹配的.tgz文件,逐个传入Log Parser命令:

for %%f in (C:\tmp\file_*.tgz) do logparser "SELECT * FROM folder/file | regex tgz:%%f! | .*\.xml" -i:TEXT -o:XML

这里的%%f会依次替换成每个匹配的.tgz文件路径,让Log Parser逐个处理。

PowerShell 脚本

如果用PowerShell,灵活性更高,写法也更清晰:

Get-ChildItem C:\tmp\file_*.tgz | ForEach-Object {
    # 把每个.tgz文件的完整路径传入Log Parser命令
    logparser "SELECT * FROM folder/file | regex tgz:$($_.FullName)! | .*\.xml" -i:TEXT -o:XML
}

方案2:先批量提取XML到本地目录(跨平台通用)

如果你的环境支持tar命令(比如Windows的Git Bash、WSL,或者Linux/macOS),可以先把所有.tgz里的XML文件批量提取到一个临时目录,再统一处理:

# 创建临时目录存放提取的XML
mkdir -p C:\tmp\extracted_xmls
# 遍历所有.tgz文件,提取其中的XML
for file in C:\tmp\file_*.tgz; do
    tar -xf "$file" --wildcards "*.xml" -C C:\tmp\extracted_xmls
done

这个方法的好处是先把所有XML文件都拿到本地,后续不管是用Log Parser还是其他工具处理都更方便。

为什么原来的写法不行?

大部分支持tgz:这类输入前缀的工具,都不会自己解析路径里的通配符(*)——通配符的解析通常是由命令行shell(比如CMD、PowerShell、Bash)来完成的,但tgz:C:\tmp\file_*.tgz!这种写法里,通配符被包含在工具的特殊语法里,shell不会去解析它,工具本身又不支持,所以就失效了。

内容的提问来源于stack exchange,提问作者faradole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:20:11