【发布时间】: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