2016-06-24 7 views
1

У меня есть строка в XML:подстроки в пакетном файле

<P4PORT>facebook.com</P4PORT> 

Как получить значение (facebook.com) в последнем <P4PORT> тега. Я, как это:

for /f "tokens=1" %%R in ('findstr /c:"<P4Port>" file.xml') do echo %%R 
PAUSE 

Но он дал мне всю строку <P4PORT>facebook.com</P4PORT>. Расскажите, как это сделать, используя командный файл.

+1

может быть, вы хотите создать VBScript который запрашивает XML (XPATH) для желаемого значения и распечатывает его. Из обратного файла вы можете прочитать это снова, используя цикл for() – AcidJunkie

+0

Попробуйте 'for/f 'tokens = 2 delims = <>" %% R in (' findstr/L/I/C: "" "файл .xml "') установить" LAST = %% R "', затем 'echo (% LAST%' (предположим, что в строке текста нет ведущих белых пробелов) ... – aschipfl

ответ

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 
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); 
0

Эта вещь работала для меня и также является простым решением. Но спасибо за ваши ответы.

для/ф "токенов = 3 delims => <" %% а в ('TYPE% ConnectionFile%^| FIND ""') делать множество P4PORT = %%

Смежные вопросы