用windows批量读取XML文件

我正在尝试读取XML文件,并从XML文件中读取构build标记之间的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> 

batch file代码

 @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文件和batch file位于相同的文件夹,我会执行cmd的batch file将运行代码?

编辑1:

@MC ND我做了你提到的变化,并运行代码。当我按enter时,光标移动到下一行,并卡在那里。我也没有给出任何输出。 我也无法closurescmd窗口。 所有这一切都在下面的图像文件中解释。

文件

回答

正如下面的MCND所build议的,我把我的文件改名为findx.bat,它返回了我想要的值“50”。正确输出的屏幕截图如下。

答

非常感谢@MCND!

Solutions Collecting From Web of "用windows批量读取XML文件"

只检索所需的行( find ),并使用精确的分隔符( <> ),标记行以检索所需的信息

  delims: vvvv 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% 

您可以尝试xpath.bat – 脚本,该脚本可以通过给定xpath从xml文件获取值:

 call xpath.bat "build.xml" "\\build" 

这个术语不会被触发,因为%%a不会仅仅是<BUILD>

 "%%a"=="<BUILD>" 

在FOR行后面添加这行代码到你的代码并运行它来显示你正在发生的事情:

 echo "%%a" 

…我相信你知道用批量解析XML可能不是最简单/最聪明的事情。 像xmlstarlet和xidel这样的工具更适合这个:

 xidel -q file.xml -e //build 

…将变量X中的buildnumber保存并输出:

 @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 -ex:=//build