Por que meu script não funciona?

0

O script que estou usando é FOR /F "tokens=91 delims=<>" %%v IN ('curl http://ci.onarandombox.com/job/Multiverse-Core/lastStableBuild/api/xml') DO ECHO %%v
O que eu quero fazer é pesquisar a saída de curl http://ci.onarandombox.com/job/Multiverse-Core/lastStableBuild/api/xml
(copie e cole o URL para vê-lo. No prompt de comando, o comando coloca tudo em uma linha embora)
para <artifact><displayPath> **THIS BIT HERE** </displayPath> e ecoar o resultado. Quando eu o executo, no entanto, ele exibe as informações de download do cURL, mas não faz eco de nada. O que eu preciso mudar no meu script?

    
por Craft1n3ss 26.04.2013 / 14:05

1 resposta

1

O problema é "tokens=91" , o número máximo permitido de tokens é 31 . Você precisa de uma técnica especial para lidar com esses arquivos xml com mais de 3.000 caracteres por linha em lote. Esta técnica está além do escopo de uma resposta na SU.

BTW: se você quiser verificar o número máximo de tokens, use o seguinte código:

@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, você pode tentar o seguinte código depois de baixar o xml e colocá-lo em um arquivo ( 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%
    
por 26.04.2013 / 19:06