Сценарий, который я использую
FOR /F "tokens=91 delims=<>" %%v IN ('curl http://ci.onarandombox.com/job/Multiverse-Core/lastStableBuild/api/xml') DO ECHO %%v
То, что я хочу сделать, это поиск выходных данных
curl http://ci.onarandombox.com/job/Multiverse-Core/lastStableBuild/api/xml
(скопируйте и вставьте URL, чтобы увидеть его. В командной строке команда помещает все в одну строку)
для <artifact><displayPath> **THIS BIT HERE** </displayPath>
и повторить результат. Однако, когда я запускаю его, он отображает информацию о загрузке cURL, но ничего не отображает. Что мне нужно изменить в моем сценарии?
1 ответ
1
Проблема состоит в том, что "tokens=91"
, максимально допустимое количество токенов - 31
. Вам нужна специальная техника, чтобы иметь дело с такими XML-файлами с более чем 3000 символов на строку в партии. Эта техника выходит за рамки ответа в SU.
Кстати: если вы хотите проверить максимальное количество токенов, вы можете использовать следующий код:
@echo off &setlocal enabledelayedexpansion
set /a maxtok=40
set /a curtok=0
for /l %%i in (1,1,%maxtok%) do set "tokvar=!tokvar! %%i"
echo variable with tokens: %tokvar%
:tokloop
set /a curtok+=1
set "disptok="
for /f "tokens=%curtok%" %%i in ("%tokvar%") do set "disptok=%%i"
echo %disptok% ^<-- there should be number %curtok%
if %curtok% lss %maxtok% goto :tokloop
Insted, вы можете попробовать следующий код после загрузки xml и поместить его в файл (file.xml
):
@echo off &setlocal
set "xmlfile=file.xml"
set "prefix=<artifact><displayPath>"
for /f "delims=" %%i in (%xmlfile%) do if not defined xmlline set "xmlline=%%i"
setlocal enabledelayedexpansion
:xmlloop
set /a xmlcount+=1
set "xmlline=!xmlline:*%prefix%=!"
for /f "delims=<" %%i in ("%xmlline%") do set "line%xmlcount%=%%i"
if %xmlcount% lss 3 goto:xmlloop
echo %line1%
echo %line2%
echo %line3%