Tại sao kịch bản của tôi không hoạt động?


0

Các kịch bản tôi đang sử dụng là
FOR /F "tokens=91 delims=<>" %%v IN ('curl http://ci.onarandombox.com/job/Multiverse-Core/lastStableBuild/api/xml') DO ECHO %%v
gì tôi muốn nó phải làm là tìm kiếm đầu ra của
curl http://ci.onarandombox.com/job/Multiverse-Core/lastStableBuild/api/xml
(sao chép và dán url để xem nó. Ở dấu nhắc lệnh, lệnh đặt nó trên cùng một dòng mặc dù)
cho <artifact><displayPath> **THIS BIT HERE** </displayPath>và echo kết quả. Tuy nhiên, khi tôi chạy nó, nó sẽ hiển thị thông tin tải xuống cURL, nhưng không lặp lại bất cứ điều gì. Tôi cần gì để thay đổi trong kịch bản của mình?

Câu trả lời:


1

Vấn đề là "tokens=91", số mã thông báo tối đa được phép là 31. Bạn cần một kỹ thuật đặc biệt để xử lý các tệp xml như vậy với hơn 3000 ký tự trên mỗi dòng. Kỹ thuật này nằm ngoài phạm vi của một câu trả lời tại SU.

BTW: nếu bạn muốn kiểm tra số lượng mã thông báo tối đa, bạn có thể sử dụng mã sau đây:

@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

Ngay lập tức, bạn có thể thử đoạn mã sau sau khi tải xuống xml và đặt nó vào một tệp ( 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%

Cảm ơn, tôi đã tự hỏi tại sao nó không hoạt động mặc dù cú pháp lệnh là chính xác. Tôi sẽ thử tạo một tập lệnh sẽ xóa 90 ký tự đầu tiên (trong các bước 30) và đăng nó ở đây nếu tôi quản lý để nó hoạt động.
Craft1n3ss

Sau một cuộc đi bộ dài với con chó của tôi, tôi có một ý tưởng khác, xin vui lòng kiểm tra nó.
Endoro

1
Cảm ơn! Tôi cũng đã tìm thấy một phương pháp khác. Nếu bạn sử dụng curl -g "http://ci.onarandombox.com/job/Multiverse-Core/lastStableBuild/api/xml?tree=artifacts[relativePath]", bạn sẽ chỉ nhận được các đường dẫn. Đây là những gì cuối cùng tôi đã nhận được:FOR /F "tokens=14 delims=<>" %%a IN ('curl -g "http://ci.onarandombox.com/job/Multiverse-Core/lastStableBuild/api/xml?tree=artifacts[relativePath]"') DO ECHO url = "http://ci.onarandombox.com/job/Multiverse-Core/lastStableBuild/artifact/%%a" > Cache\Multiverse-Core.txt curl -z plugins\Multiverse-Core.jar -K Cache\Multiverse-Core.txt
Craft1n3ss
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.