繁体   English   中英

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

[英]how can i get a part of string from xml in batch file

首先,我真的是批处理或 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 这种方式无法解决,请告诉我,因为我必须找到另一种方式。

谢谢你。

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

正如其他人已经指出的那样,当涉及到 XML 文件(和类似文件)时, 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%

jrepl.batdbenham 编写

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM