我正在尝试创建一个批处理文件,该文件读取存储在两个不同位置的相同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>
我收到的错误消息是..
我无法理解我在这段代码中犯了什么错误。请帮助..
答案 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个令牌)