标题: [文本处理] 批处理提取XML中指定内容,并赋值 [打印本页]
作者: yyuanstudio 时间: 2022-3-1 14:02 标题: 批处理提取XML中指定内容,并赋值
本帖最后由 yyuanstudio 于 2022-3-1 14:03 编辑
各位大佬,请教个问题。
我通过windows的命令winsat formal 生成了个xml文件,想用bat读取里面的内容并赋值显示出来。
但是这个xml不是标准的xml格式,我尝试用了token无法获取想要的信息。请各位大佬赐教~
那个文件我传不上来
我要取SystemScore、MemoryScore 这几个有数值的参数
xml文件内容如下:
<WinSPR>
<SystemScore>8.1</SystemScore>
<MemoryScore>9.1</MemoryScore>
<CpuScore>9.1</CpuScore>
<CPUSubAggScore>8.2</CPUSubAggScore>
<VideoEncodeScore>9.9</VideoEncodeScore>
<GraphicsScore>8.1</GraphicsScore>
<Dx9SubScore>9.9</Dx9SubScore>
<Dx10SubScore>9.9</Dx10SubScore>
<GamingScore>9.9</GamingScore>
<DiskScore>8.65</DiskScore>
<ScoreRaisedDueToHigherPreviousScore>
<ActualDiskScore>8.5</ActualDiskScore>
</ScoreRaisedDueToHigherPreviousScore>
<LimitsApplied>
<GamingScore>
<LimitApplied Friendly="We no longer run the D3D test. Returned scores and metrics are hardcoded sentinel values.">NoD3DTestRun</LimitApplied>
</GamingScore>
</LimitsApplied>
</WinSPR>
作者: qixiaobin0715 时间: 2022-3-1 14:21
- @echo off
- set var=SystemScore MemoryScore
- findstr "%var%" "a.xml"
- pause
复制代码
作者: yyuanstudio 时间: 2022-3-1 14:51
回复 2# qixiaobin0715
大佬,如果我把上面贴出来的文本单独保存到xml里,这个代码是可以找到的。但通过winsat formal 命令生成的xml文件,用这个代码就不会显示任何东西。
winsat formal -xml %temp%\WinSAT.xml 这个命令就是电脑性能评估完得到的xml文件。 执行这个命令会使风扇声音变大。
我把文件分享出来了,大佬帮忙看看,感谢感谢~
链接:https://pan.baidu.com/s/1h2Wg_gYVYhbiIb_Mh5lWww
提取码:drir
作者: WHY 时间: 2022-3-1 21:52
这个 XML 格式并非"不标准",只是整改 XML 合并为一行而已。
Powershell 脚本:- [xml](gc WinSAT.xml) | Select-XML '//SystemScore|//MemoryScore' | forEach{$_.Node.Name,$_.Node.innerText}
复制代码
- $str = [IO.File]::ReadAllText('WinSAT.xml', [Text.Encoding]::Default);
- forEach($m In [regex]::Matches($str, '<(SystemScore|MemoryScore)>[^<>]*</\1>')){
- $m.Groups[0].Value;
- }
复制代码
作者: yyuanstudio 时间: 2022-3-2 15:43
回复 4# WHY
非常感谢大佬大晚上的帮助,这个脚本确实可以帮我解决了问题。
然后我想加个自定义的输出值,输出结果想变成中文,比如:
以上脚本输出的是:
SystemScore
8.1
MemoryScore
9.1
我现在想变成:
系统分数:8.1
内存分数:9.1
我在尝试添加 forEach {@{name="系统评分" ; expression={$_.Node.Name}},$_.Node.innerText} 没有看到想要的结果。是脚本哪里写错了吗?
作者: yyuanstudio 时间: 2022-3-3 10:09
非常谢谢楼上两位大佬,我用其他方法实现了自定义输出结果。
保存成txt,然后再读取进行自定义显示结果。
作者: WHY 时间: 2022-3-3 20:34
回复 5# yyuanstudio - $Hash = @{SystemScore='系统分数'; MemoryScore='内存分数'}
- [xml](gc WinSAT.xml) | Select-XML '//SystemScore|//MemoryScore' | forEach{$Hash[$_.Node.Name] + ':' + $_.Node.innerText}
复制代码
作者: yyuanstudio 时间: 2022-3-9 15:50
回复 7# WHY
谢谢大佬~膜拜
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |