我一直在研究如何将xml输入文件读入批处理文件以读取比较数据,但没有太多运气。
然后需要将这些数据存储为变量,以便我们比较这些值。
我们需要测量的总共有4个值,它们是温度,pH值,nh3和o2
因为这些值在拉动数据时每小时都会发生变化,我们需要一种比较数据的方法,例如:
IF ph=7.8 GOTO PHHIGH ELSE OK
这可能吗?
非常感谢所有回应的人。
我在下面列出了xml文件:
答案 0 :(得分:0)
这适用于您现在发布的数据。
@echo off
for %%a in (temperature ph nh3 o2) do (
for /f "tokens=2 delims=</>" %%b in ('type "[Megafileupload]Seneye_Reading.xml" ^|findrepl "(<.*?>.*?</.*?>)" "$1\r\n" ^|findrepl "><" ">\r\n<" ^|findrepl ".*<%%a>.*" /e:".*</%%a>.*" /b:".*<curr>" ') do set "123-%%a=%%b"
)
set 123
pause
这使用名为findrepl.bat
的助手批处理文件(由aacini提供) - 从以下网址下载:https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat
将findrepl.bat
放在与批处理文件相同的文件夹中或路径上。
答案 1 :(得分:0)
你可以这样做:
@echo off
set $c=1
for /f "delims=" %%a in ('findstr /i "curr" test.txt') do call:next "%%a"
echo ----
echo Temp = %temperature%
echo pH = %pH%
echo NH4 = %NH4%
echo O2 = %O2%
echo ---
if %pH% Geq 7.8 (echo --^> The pH is High) else (echo --^>The pH is OK)
exit /b
:next
set $Line=%1
set $Line=%$Line:<curr>=%
set $Line=%$Line:</curr>=%
set $Line=%$Line: =%
if %$c%==1 set temperature=%$Line:~1,-1%
if %$c%==2 set pH=%$Line:~1,-1%
if %$c%==3 set NH4=%$Line:~1,-1%
if %$c%==4 set O2=%$Line:~1,-1%
set /a $c+=1
将test.txt替换为您的文件名(.xml或.json)。
这将获得<curr></curr>
编辑:
显然你的XML文件在一行上。
您可以使用我为此POST制作的这个小工具:StringBetween.rar:Extracting string from any non-binary file irrespective of its location within file
然后您的BAT文件将如下所示:
@echo off
set $c=1
stringbetween test.xml "<curr>" "</curr>"
for /f "delims=" %%a in (output.txt) do call:next %%a
echo ----
echo Temp = %temperature%
echo pH = %pH%
echo NH3 = %NH3%
echo NH4 = %NH4%
echo O2 = %O2%
echo ---
if %pH% Geq 7.8 (echo --^> The pH is High) else (echo --^>The pH is OK)
exit /b
:next
echo %1
if %$c%==1 set temperature=%1
if %$c%==2 set pH=%1
if %$c%==3 set NH3=%1
if %$c%==4 set NH4=%1
if %$c%==5 set O2=%1
set /a $c+=1
再次:只需用test.xml
文件的名称替换xml
。