@echo off
setlocal
rem Process all *.xml files
for %%f in (*.xml) do (
rem Get the line number of "TestResults index=Sensor1"
for /F "delims=:" %%i in ('findstr /N /C:"TestResults index=\"Sensor1\"" "%%f"') do (
rem Show the result from first "Passed" line after "TestResults"
set "first="
for /F "delims=:<> tokens=1,4" %%a in ('findstr /N "Passed" "%%f"') do (
if not defined first if %%a gtr %%i (
echo %%f: %%b
set "first=True"
)
)
)
)
@ECHO OFF
SETLOCAL
rem The following settings for the source directory and filename are names
rem that I use for testing and deliberately include names which include spaces to make sure
rem that the process works using such names. These will need to be changed to suit your situation.
SET "sourcedir=u:\your files"
SET "filename1=%sourcedir%\xmldata.xml"
SET "index="
FOR /f "usebackqtokens=1,2delims=<> " %%g IN ("%filename1%") DO (
IF DEFINED index IF "%%g"=="Passed" SET "passed=%%h"
IF DEFINED index GOTO done
IF "%%g"=="TestResults" SET %%h
)
:done
IF DEFINED passed (ECHO FOR %index% - %passed%) ELSE (ECHO NOT found)
GOTO :EOF
2条答案
按热度按时间avwztpqn1#
如果所有文件中只有一行
<Passed>true|false</Passed>
,那么解决方案非常简单:字符串
如果有多个
Passed
行,而你想要<TestResults index="Sensor1">
行之后的那一行,那么使用这个方法:型
9rygscc12#
字符串
在应用于真实的数据之前,始终根据测试目录进行验证。
请注意,如果文件名不包含分隔符(如空格),则可以省略
usebackq
和%filename1%
周围的引号。读取文件,使用<>空格作为分隔符标记每一行。选择前2个标记
%%g
和%%h
。如果第一个标记是“Testresults”,则执行
set %%h
。%%h
将是index="something"
,因此变量index
将被设置为"something"
。如果已经设置了
index
,并且第一个标记是Passed
,则将passed
设置为第二个标记,然后退出。如果已设置
index
,但下一行的第一个标记不是Passed
,则退出(假定为错误情况)报告结果。