Warum funktioniert mein Skript nicht?

0

Das Skript Ich benutze ist
FOR /F "tokens=91 delims=<>" %%v IN ('curl http://ci.onarandombox.com/job/Multiverse-Core/lastStableBuild/api/xml') DO ECHO %%v
Was ich will , ist es die Ausgabe zu tun suchen
curl http://ci.onarandombox.com/job/Multiverse-Core/lastStableBuild/api/xml
(Kopieren und Einfügen der URL , um es zu sehen. In Eingabeaufforderung setzt der Befehl das alles zwar auf einer Linie ist)
für <artifact><displayPath> **THIS BIT HERE** </displayPath>und Echo das Ergebnis. Wenn ich es jedoch starte, zeigt es die cURL-Download-Informationen an, gibt aber überhaupt nichts zurück. Was muss ich in meinem Skript ändern?

Craft1n3ss
quelle

Antworten:

1

Das Problem ist "tokens=91", dass die maximal zulässige Token-Nummer ist 31. Sie benötigen eine spezielle Technik, um mit solchen XML-Dateien mit mehr als 3000 Zeichen pro Zeile im Batch umzugehen. Diese Technik geht bei SU über den Rahmen einer Antwort hinaus.

Übrigens: Wenn Sie die maximale Anzahl von Token überprüfen möchten, können Sie den folgenden Code verwenden:

@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

In diesem Fall können Sie nach dem Herunterladen der XML-Datei den folgenden Code ausprobieren und in eine Datei einfügen ( 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%
Endoro
quelle
Danke, ich habe mich gefragt, warum es nicht funktioniert hat, obwohl die Befehlssyntax korrekt war. Ich werde versuchen, ein Skript zu erstellen, das die ersten 90 Zeichen (in Schritten von 30) löscht und es hier veröffentlicht, wenn ich es zum Laufen bringe.
Craft1n3ss
Nach einem langen Spaziergang mit meinem Hund habe ich eine andere Idee, bitte probieren Sie es aus.
Endoro
1
Vielen Dank! Ich habe auch eine andere Methode gefunden. Wenn Sie verwenden curl -g "http://ci.onarandombox.com/job/Multiverse-Core/lastStableBuild/api/xml?tree=artifacts[relativePath]", erhalten Sie nur die Pfade. 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
Folgendes habe