使用Windows批处理比较两个XML文件

使用Windows批处理比较两个XML文件,xml,windows,batch-file,cmd,Xml,Windows,Batch File,Cmd,我正在尝试创建一个批处理文件,该文件读取存储在两个不同位置的相同XML文件,并使用xmls文件中的build标记比较其生成版本是否相同。批处理代码为 @echo off setlocal enableextensions disabledelayedexpansion set "build=" set "build1=" set "ans=version same" set "wrong=version not same" for /f "tokens=3 delims=<>"

我正在尝试创建一个批处理文件,该文件读取存储在两个不同位置的相同XML文件,并使用xmls文件中的build标记比较其生成版本是否相同。批处理代码为

 @echo off
setlocal enableextensions disabledelayedexpansion

set "build=" 
set "build1="
set "ans=version same"
set "wrong=version not same"
for /f "tokens=3 delims=<>" %%a %%b in (
    'find /i "<Build>" ^< "C:\Users\Lucy\Desktop\piller-uniblock\master.xml" "C:\piller-uniblock\master.xml" '
) do set "build=%%a" "build1=%%b"

IF "%build%"=="%build1%" echo %ans%
 else echo %wrong%
批处理代码为

 @echo off
setlocal enableextensions disabledelayedexpansion

set "build=" 
set "build1="
set "ans=version same"
set "wrong=version not same"
for /f "tokens=3 delims=<>" %%a %%b in (
    'find /i "<Build>" ^< "C:\Users\Lucy\Desktop\piller-uniblock\master.xml" "C:\piller-uniblock\master.xml" '
) do set "build=%%a" "build1=%%b"

IF "%build%"=="%build1%" echo %ans%
 else echo %wrong%
@echo关闭
setlocal enableextensions disabledelayedexpansion
设置“build=”
设置“build1=”
设置“ans=版本相同”
设置“错误=版本不相同”
对于/f“令牌=3 delims=“%%a%%b in(
“查找/i”“^<”C:\Users\Lucy\Desktop\piller uniblock\master.xml“C:\piller uniblock\master.xml”
)是否设置“build=%%a”“build1=%%b”
如果“%build%”==“build1%”回显%ans%
其他回音%错误%
我试图将两个xml文件的build标记的值存储在两个变量中,然后比较它们。如果它们相同,则通过变量打印“相同”或“不相同”

存储在两个不同位置的XML文件是

master.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> 

1.
0
50
.
我收到的错误消息是


我无法理解我在这段代码中犯了什么错误。请帮助..

您的错误就在这里
for/f“tokens=3 delims=“%%a%%b

首先,您只使用第三个令牌,因此永远不会设置%%b。
这样,即使您需要多个令牌,也不必指定%%b,这意味着:
(假设您想要获得第三个和第四个代币)您可以写:


for/f“tokens=3,4 delims=“%%a in…”。。。执行echo%%a%%b
(%b将自动填充第四个令牌)

键入这两个文件,使用
查找
进行筛选,仅获取
行,并根据包含数据的变量,将检索到的信息分配给其中一个

@echo off
    setlocal enableextensions disabledelayedexpansion

    set "build=" 
    set "build1="

    set "ans=version same"
    set "wrong=version not same"

    for /f "tokens=3 delims=<>" %%a in ('
        2^>nul type "C:\Users\Lucy\Desktop\piller-uniblock\master.xml"
                    "C:\piller-uniblock\master.xml"
        ^| find /i "<Build>" 
    ') do if not defined build ( set "build=%%a" ) else ( set "build1=%%a" )

    IF "%build%"=="%build1%" ( echo %ans% ) else echo %wrong%
@echo关闭
setlocal enableextensions disabledelayedexpansion
设置“build=”
设置“build1=”
设置“ans=版本相同”
设置“错误=版本不相同”
对于/f“tokens=3 delims=“%%a in('
2^>nul类型“C:\Users\Lucy\Desktop\piller uniblock\master.xml”
“C:\piller uniblock\master.xml”
^|查找/i“”
“)如果未定义生成(设置“build=%%a”)则不执行其他操作(设置“build1=%%a”)
如果“%build%”==“build1%”(回显%ans%),则其他回显%错误%