问题描述
首先,我真的是批处理或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编程。