使用Windows批处理读取XML文件

Luc*_*ucy 1 xml windows cmd batch-file

我正在尝试读取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>
Run Code Online (Sandbox Code Playgroud)

批处理文件代码..

@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
Run Code Online (Sandbox Code Playgroud)

如果xml文件和批处理文件位于同一文件夹中并且我从cmd执行批处理文件,代码是否会运行?

编辑1:

@MC ND我做了你提到的更改并运行了代码.当我按下回车键时,光标移动到下一行并卡在那里.我也没有给出任何输出.我也无法关闭cmd窗口.所有这些都在下面的图像文件中解释.

文件

回答

正如下面的MCND建议我将我的文件重命名为findx.bat,它返回值"50",这就是我想要的.正确输出的屏幕截图如下所示.

答

非常感谢@MCND !!

MC *_* ND 6

仅检索所需的行(find),并使用适当的分隔符(<>)标记该行以检索所需的信息

     delims:    v     v  v      v
     line  :    <Build>50</Build>
     tokens:^1   ^2    ^3 ^4
Run Code Online (Sandbox Code Playgroud)

现在,将其转换为代码

@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%
Run Code Online (Sandbox Code Playgroud)