从Batch文件中读取XML输入并将值存储在Variable中(将Json输出固定为xml)

时间:2014-07-11 13:49:51

标签: xml batch-file compare

我一直在研究如何将xml输入文件读入批处理文件以读取比较数据,但没有太多运气。

然后需要将这些数据存储为变量,以便我们比较这些值。

我们需要测量的总共有4个值,它们是温度,pH值,nh3和o2

因为这些值在拉动数据时每小时都会发生变化,我们需要一种比较数据的方法,例如:

IF ph=7.8 GOTO PHHIGH ELSE OK

这可能吗?

非常感谢所有回应的人。

我在下面列出了xml文件:

http://s1.uploads.im/KriCJ.jpg

2 个答案:

答案 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.rarExtracting 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