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

时间:2014-09-17 12:10:57

标签: xml windows batch-file cmd

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

批次代码为..

 @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%

我正在尝试将两个xml文件的构建标记的值存储在2个变量中,然后比较它们。如果它们相同则打印“相同”,否则“不相同”通过变量。

存储在我正在尝试阅读的两个不同位置的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> 

我收到的错误消息是..

error1

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

2 个答案:

答案 0 :(得分:1)

type这两个文件,使用find进行过滤以仅获取<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 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%

答案 1 :(得分:0)

您的错误在for /f "tokens=3 delims=<>" %%a %%b

首先你只拿第三个标记,所以永远不会设置%% b 那么你就不必指定%% b,即使你想要多个令牌也意味着:
(比方说你想获得第三和第四个代币)你可以写:

for /f "tokens=3,4 delims=<>" %%a in ... do echo %%a %%b(%% b将自动填充第4个令牌)