读取.XML文件的特定标记之间的文本,并使用批处理文件将其显示在.txt文件中

时间:2017-11-13 14:17:46

标签: xml batch-file

我必须知道Jenkins版本,它只出现在' config.xml'文件,下面是它的内容:

< version > 1.652 < / version > 

(我修改了xml行的语法,使其作为平面文本可见) 我试图在标签1.652和echo&#34; 1.652&#34;之间拉取版本号。到.txt文件。

我是初学者,并且在网上找不到特定的代码。

1 个答案:

答案 0 :(得分:1)

直接回答问题的简单解决方案是将此PowerShell单线程放入.bat脚本中:

powershell "([xml](gc config.xml)).SelectSingleNode('//version/text()').data" >out.txt

这将客观化您的XML数据,选择第一个<version>标记的子文本节点,并将其值输出到out.txt。

我对你将版本值写入.txt文件有点怀疑,但是,当它已经在config.xml中编写时。这有必要吗?听起来您将使用一些Rube Goldberg级别的复杂性将版本数据导出到文本文件,然后将值重定向回变量。如果这就是你的计划,那就比它需要的更复杂。如果您要将版本号与某些内容进行比较,请保留PowerShell以执行比较。

这是一个本机PowerShell .ps1脚本示例:

[version]$minimumVer = "1.652"
[version]$jenkinsVer = ([xml](gc config.xml)).SelectSingleNode('//version/text()').data

if ($minimumVer -gt $jenkinsVer) {
    "Fail.  Jenkins must be version $minimumVer or newer for this to work."
}
else {
    "Happiness and rainbows."
}

这是针对.bat脚本格式化的PowerShell one(ish)-liner。它使用exit [boolean]为条件执行设置%ERRORLEVEL%&&||内容。

@echo off & setlocal

set "minVersion=1.652"

set "psCmd=powershell "exit ([version](([xml](gc config.xml)).SelectSingleNode(^
'//version/text()').data) -ge [version]'%minVersion%')""

%psCmd% && (
    echo Fail.  Jenkins must be version %minVersion% or newer for this to work.
) || (
    echo Happiness and rainbows.
)