[英]Read XML file with windows batch
我正在尝试读取xml文件,并从XML文件中读取构建标记之间的STRING“ 50”。 我试过了,但是没有任何输出。
XML文件。
<?xml version="1.0" encoding="UTF-8"?>
<CDMDataXML xmlns="http://www.avocent.org/trellis/CDMLoaderXMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.avocent.org/trellis/CDMLoaderXMLSchema CDMLoaderXMLSchema.xsd">
<CDMDataVersion>
<Major>1</Major>
<Minor>0</Minor>
<Build>50</Build>
<Delimiter>.</Delimiter>
</CDMDataVersion>
批处理文件代码。
@ECHO OFF
SETLOCAL
SET "build="&SET "grab="
FOR /f "tokens=*" %%a IN (version.xml) DO (
IF DEFINED grab SET build=%%a&SET "grab="
IF /i "%%a"=="<BUILD>" SET grab=Y
)
ECHO found build=%build%
GOTO :EOF
如果xml文件和批处理文件位于同一文件夹中,并且我从cmd执行批处理文件,代码将运行吗???
编辑1:
@MC ND我进行了您提到的更改并运行了代码。当我按Enter键时,光标移至下一行并卡在了那里。我也没有任何输出。 我也无法关闭cmd窗口。 所有这些都在下面的图像文件中说明。
回答
正如下面的MCND所建议的,我将文件重命名为findx.bat,它返回的值是我想要的值“ 50”。正确输出的屏幕截图如下。
非常感谢@MCND!
仅检索所需的行( find
),并使用指定的定界符( <>
)将该行标记化以检索所需的信息
delims: v v v v
line : <Build>50</Build>
tokens:^1 ^2 ^3 ^4
现在,将其翻译成代码
@echo off
setlocal enableextensions disabledelayedexpansion
set "build="
for /f "tokens=3 delims=<>" %%a in (
'find /i "<Build>" ^< "file.xml"'
) do set "build=%%a"
echo %build%
...我确定您知道用批处理解析XML可能不是最容易/最聪明的事情。 诸如xmlstarlet和xidel之类的工具更适合于此:
xidel -q file.xml -e //build
...将内部版本号保存在变量X中并输出:
@echo off
for /f "delims=" %%a in ('xidel -q --output-format cmd file.xml -e "x:=//build"') do %%a
echo Build version = %x%
...如果BeniBela(xidel编码器)可以对以下内容进行编程以直接设置环境变量而不生成输出的set命令,那就更好了。 那将非常强大(而且简短)。 贝尼? 你准备好了吗? :-)
xidel -q -cmd file.xml -e x:=//build
您可以尝试xpath.bat-可以通过给定xpath从xml文件获取值的脚本:
call xpath.bat "build.xml" "\\build"
此术语不会触发,因为%%a
不会仅仅是<BUILD>
"%%a"=="<BUILD>"
将此行添加到FOR行之后的代码中,然后运行它以显示正在发生的情况:
echo "%%a"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.