我正在使用的脚本是
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
问题是"tokens=91"
,允许的最大标记数是31
。您需要一种特殊的技术来批量处理每行超过 3000 个字符的 xml 文件。这种技术超出了 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
实际上,您可以在下载 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%