批处理文件中的子字符串

时间:2016-06-24 11:28:05

标签: batch-file cmd

我在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>。请告诉我们如何使用批处理文件实现此目的。

3 个答案:

答案 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