我正在尝试创建一个批处理文件,该文件比较存储在两个不同位置的单个XML文件的两个副本,并检查它们的版本是否相同。
目前我正在使用fc& findstr命令只检查2个文件中的构建标记,但我想添加代码1st检查主要标记的功能,如果不同则代码停止执行并打印“文件不同”。
如果值相同,则继续检查2个文件中的次要标签。如果值不同,则代码停止执行并打印“文件不同”。如果值相同则继续检查构建标记。如果构建值不同,则打印“文件不同”,否则“文件相同”..
因此,检查标签的流程是 - > - >
存储在2个不同位置的文件是
TData.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>3</Major>
<Minor>0</Minor>
<Build>19</Build>
<Delimiter>.</Delimiter>
</CDMDataVersion>
我正在使用的批处理代码是..
@echo off
fc D:\SVN\TData\TData.xml Z:\TDataGDDFolders\TData.xml /A > nul
if errorlevel 1 (
echo.
echo in SVN
findstr "<Build>" D:\SVN\TData\TData.xml
echo.
echo in DropBox
findstr "<Build>" Z:\TDataGDDFolders\TData.xml
echo.
echo.
echo TData files are different.
) else (
echo.
echo in SVN
findstr "<Build>" D:\SVN\TData\TData.xml
echo.
echo in DropBox
findstr "<Build>" Z:\TDataGDDFolders\TData.xml
echo.
echo.
echo TData files matches.
)
我正在尝试在批处理代码中添加上述功能,但似乎无法理解如何操作...请帮助..
答案 0 :(得分:1)
只需重复使用previous answer
中的代码即可@echo off
setlocal enableextensions disabledelayedexpansion
set "file1=%cd%\tdata_1.xml"
set "file2=%cd%\tdata_2.xml"
call :compareXML "%file1%" "%file2%" "Major" || ( echo files different & goto :eof )
call :compareXML "%file1%" "%file2%" "Minor" || ( echo files different & goto :eof )
call :compareXML "%file1%" "%file2%" "Build" || ( echo files different & goto :eof )
echo files same
exit /b
:compareXML file1 file2 taglist
setlocal enableextensions disabledelayedexpansion
setlocal enableextensions enabledelayedexpansion
set "match=" & for %%a in (%~3) do set "match=!match! /c:"^<%%a^>""
endlocal & set match=%match%
for /f "tokens=1,2 delims=<> " %%a in ('
type "%~1" "%~2" 2^> nul ^| findstr /i /l %match%
') do if not defined _F1_%%a ( set "_F1_%%a=%%b" ) else (
setlocal enabledelayedexpansion
for %%c in ("!_F1_%%a!.") do (
endlocal
if /i not "%%b."=="%%~c" ( endlocal & exit /b 1 )
set "_F1_%%a="
)
)
set _F1_ 2>nul && ( endlocal & exit /b 1 ) || ( endlocal & exit /b 0 )