【问题标题】:how can i get a part of string from xml in batch file如何从批处理文件中的 xml 获取字符串的一部分
【发布时间】:2020-08-13 05:48:31
【问题描述】:

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

谢谢。

【问题讨论】:

  • 是一个批处理文件吗?它也可以是 VBScript 吗?还是 PowerShell? (使用板载工具批量正确执行此操作非常困难,如果可能的话,我建议使用其他工具。)
  • 另外,包括 XML(或其压缩示例)并准确指出您要提取的部分。
  • @Tomalak 添加了我的 xml 格式。而且我更喜欢VBScript,如果可能的话我从来没有想过powershell,但它看起来不错。如果您有任何建议,请告诉我。
  • 那么我们来做VBScript,因为你似乎已经在使用它了。请添加更多 XML - 一个完整的文件,而不仅仅是两个元素,但您可以删除重复的部分,只要该文件之后仍然有效。
  • 可以很简单,没有问题。但是您在此处显示的不是 XML。除非您将其转换为 XML(它缺少顶级元素)或决定使用限制较少的文件格式,否则无法解决这个问题。

标签: xml batch-file cmd command-line token


【解决方案1】:

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

正如其他人已经指出的那样,cmd 在处理 XML 文件(和类似文件)时并不是一个真正的好工具。

但如果您愿意使用external tool,那就很容易了。只需简单的正则表达式搜索&lt;KEY&gt;&lt;KEY&gt; 之间的字符串(第二个不应该是&lt;/KEY&gt; 吗?):

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 编程。

【讨论】:

    猜你喜欢
    • 2023-03-07
    • 2020-06-13
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2021-06-01
    • 2017-07-02
    • 2021-02-17
    • 2018-05-13
    相关资源
    最近更新 更多