我如何从批处理文件中的xml中获取字符串的一部分

问题描述

首先,我真的是批处理或cmd语法的初学者。 因此,我的语法看起来很愚蠢,请宽广阅读。谢谢!

我想从我的特定本地xml文件中获取一个值,我想获取该值的一部分。因为,我必须将该值与其他特定值进行比较。

好吧,我尽了全力找到了它。但是我不能100%。 请阅读此代码。

fc /b "C:\e\e.xml" "C:\Users\%username%\Documents\e\e.xml" return errorlevel

set usr_name=%username:~-2,2%
set _name=

IF %ERRORLEVEL% EQU 0 (         
    for /f "tokens=2delims=<>" %%i in ('find "KEY" "c:\e\e.xml"') do echo %%i
    REM echo ^<username^>%usr_name%^</Setup_Date^>^<substr^>%%i^</substr^> > "C:\e\test.xml"    
            
    echo ^<username^>%usr_name%^</username^>^<substr^>%_name%^</substr^> > "C:\e\test.xml"
    if %%i:~-4,2 == %usr_name% (
    
    REM echo ^<username^>%usr_name%^</username^>^<substr^>%%i:~-4,2%^</substr^> > "C:\e\test.xml"
    echo YES
    ELSE (
echo NO
cscript no.vbs  
)

这是我的xml文件。 我想获取KEY标签的D4(D4,它从背面第4个起占2个字母。)

<Date>2020-08-13</Date><Setup>Zs#ol9fEV9pA</Setup>
<KEY>WY(T5XD4h4<KEY>

问题是这个

REM echo ^<username^>%usr_name%^</Setup_Date^>^<substr^>%%i^</substr^> > "C:\e\test.xml"    
            
echo ^<username^>%usr_name%^</username^>^<substr^>%_name%^</substr^> > "C:\e\test.xml"

如果值i = abcdef 我可以使用REM语句从xml文件abcdef中获取值。 但是我无法获得变量i的一部分。

当我使用第二句或其他表达式,例如%i:〜-4,2%等(因为我想使用那部分值进行比较。%i:〜-4,2%= cd) 我不能打印任何值,什么也不能打印。

有没有办法解决这个问题? 就像我之前说的,我对批处理了解甚少, 所以让我知道你所知道的一切。或者,如果不使用其他库或xpath.bat无法解决此问题,请告诉我,因为我必须找到另一种方法。

谢谢。

解决方法

python3 -m pip3 install pandas仅在%%i循环内定义。如您所写,整个循环仅包含for。然后循环结束,不再定义echo %%i

正如其他人已经指出的那样,%%i并不是处理XML文件(和外观相似)的好工具。

但是,如果您愿意使用external tool,它将变得很容易。只需简单的REGEX搜索cmd<KEY>之间的字符串(第二个不是<KEY>吗?):

</KEY>

for /f "delims=" %%a in ('^<"c:\e\e.xml jrepl ".*<KEY>(.*)<KEY>.*" "$1" /a') do set "key=%%a" echo Key: %key%,Subkey:%key:~-4,2% dbenham编程。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...