我在xml中有一行:
<P4PORT>facebook.com</P4PORT>
如何在最后<P4PORT>
标记中获取值(facebook.com)。我这样用过:
for /f "tokens=1" %%R in ('findstr /c:"<P4Port>" file.xml') do echo %%R
PAUSE
但它给了我整个字符串<P4PORT>facebook.com</P4PORT>
。请告诉我们如何使用批处理文件实现此目的。
答案 0 :(得分:0)
将RegExp
与vbscript一起使用:
strData = "<P4PORT>facebook.com</P4PORT>"
With New RegExp
.IgnoreCase = True
.Pattern = "<P4PORT>((.|\n)*?)</P4PORT>"
Set Matches = .Execute(strData)
End With
If Matches.Count > 0 Then strText = Matches(0).SubMatches(0)
wscript.echo strText
答案 1 :(得分:0)
将XML或任何其他结构化数据解析为分层对象总是更好,而不是将其作为复杂的文本进行破解和删除。这样,您不依赖于数据的格式,无论是美化,缩小还是其他。最简单的解决方案是将其放入批处理脚本中:
for /f "delims=" %%I in (
'powershell "([xml](gc filename.xml)).SelectSingleNode('//P4PORT/text()').data"'
) do set "P4PORT=%%I"
echo %P4PORT%
如果您认为速度超过简单性,您也可以调用JScript来解析XML。保存此批处理+ JScript混合脚本,扩展名为.bat。
@if (@CodeSection == @Batch) @then
@echo off & setlocal
for /f "delims=" %%I in (
'cscript /nologo /e:JScript "%~f0" "filename.xml"'
) do set "P4PORT=%%I"
echo %P4PORT%
goto :EOF
@end // end Batch / begin JScript hybrid code
var xml = WSH.CreateObject('MSXML2.DOMDocument.6.0');
xml.load(WSH.Arguments(0));
WSH.Echo(xml.selectSingleNode('//P4PORT/text()').data);
答案 2 :(得分:0)
这件事对我有用,也是一个简单的解决方案。但谢谢你的回答。
for / f“tokens = 3 delims =&gt;&lt;”%% a in('TYPE%connectionfile%^ | FIND“”')设置P4PORT = %% a