In einer xml Liste eingetragene URLs per cURL laden - 1. geht, wie Schleife drum rum bauen?
Hallo,
ich habe eine einfach xml Liste in der URLs zu Dateien auf meinem Webserver stehen.
Per Batch möchte ich diese jetzt alle auslesen und mit die Dateien per cURL laden, bisher funktioniert das auch soweit, das ich mir eine gewisse Zeile der xml aussuchen kann und dann die dort angegebene Datei geladen wird. Aber wie bekomme ich es hin, das jede enthaltene URL geladen wird, also eine Schleife um die ganze Geschichte?
Hier wird dank 'more +1 %verzeichnis%%loadlist%' die erste Zeile der immer unterschiedlich langen xml ausgelesen.
Jetzt ist nur die Frage wie man alle schön nacheinander in Schleife abarbeiten kann.
Ich denke mal das dürfte nicht allzu schwer sein, aber ich bekomms leider nicht hin
Gruß, maccoX
ich habe eine einfach xml Liste in der URLs zu Dateien auf meinem Webserver stehen.
Per Batch möchte ich diese jetzt alle auslesen und mit die Dateien per cURL laden, bisher funktioniert das auch soweit, das ich mir eine gewisse Zeile der xml aussuchen kann und dann die dort angegebene Datei geladen wird. Aber wie bekomme ich es hin, das jede enthaltene URL geladen wird, also eine Schleife um die ganze Geschichte?
set "file="
for /f "tokens=2 delims=<> " %%a in ('more +1 %verzeichnis%%loadlist%') do if not defined file set file=%%a
echo %file%
for /f "tokens=5 delims=/ " %%a in ("%file%") do if not defined filename set filename=%%a
curl %file% -o %verzeichnis%%filename%
Hier wird dank 'more +1 %verzeichnis%%loadlist%' die erste Zeile der immer unterschiedlich langen xml ausgelesen.
Jetzt ist nur die Frage wie man alle schön nacheinander in Schleife abarbeiten kann.
Ich denke mal das dürfte nicht allzu schwer sein, aber ich bekomms leider nicht hin
Gruß, maccoX
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 166114
Url: https://administrator.de/contentid/166114
Ausgedruckt am: 04.11.2024 um 18:11 Uhr
17 Kommentare
Neuester Kommentar
Aloha,
nun, dann eventuell so:
greetz André
gut, man könnte eigentlich die
edit: Mehr fliegende Zollstöcke ... und einige weg
nun, dann eventuell so:
@echo off & setlocal
set "verzeichnis=%temp%\"
set "loadlist=bla.xml"
set "file="
for /f "tokens=2 delims=<> " %%a in ('more +1 %verzeichnis%%loadlist%') do call :Ablauf "%%a"
pause
goto :eof
:Ablauf
if not defined file set file=%1
echo %file%
for /f "tokens=5 delims=/ " %%a in (%file%) do if not defined filename set filename=%%a
echo "%filename%"
curl %file% -o "%verzeichnis%%filename%"
set file=
set filename=
goto :eof
greetz André
gut, man könnte eigentlich die
if not defined
-Sachen wegstreichen aber was soll'sedit: Mehr fliegende Zollstöcke ... und einige weg
Hallo macoonX!
Wenn ich das soweit richtig gesehen habe, brauchst Du doch eigentlich nur eine Variable zu verwenden - ungetestet etwa so:
Übrigens sollte sich eigentlich %file% durch %1 ersetzen lassen ...
Grüße
bastla
Wenn ich das soweit richtig gesehen habe, brauchst Du doch eigentlich nur eine Variable zu verwenden - ungetestet etwa so:
set tok=5
if /i "%~x1"==".php" set tok=4
for /f "tokens=%tok% delims=/ " %%a in (%file%) do set "filename=%%a"
Grüße
bastla
Moin maccoX,
Wenn die aber in einer anderen variable steht (z.B. %file%) dann musst du den Vergleich im IF-Konstrukt daraufhin anpassen.
Grüße
Biber
Zitat von @maccoX:
..., allerdings scheint der if Befehl nicht zu greifen, tok bleibt leider stets 5.
bastlas Zeile..., allerdings scheint der if Befehl nicht zu greifen, tok bleibt leider stets 5.
if /i "%~x1"==".php" set tok=4
...setzt natürlich voraus, dass die Datei mit (möglicherweise) der Endung ".php" auch als Parameter1 übergeben wird.Wenn die aber in einer anderen variable steht (z.B. %file%) dann musst du den Vergleich im IF-Konstrukt daraufhin anpassen.
...
REM Ersatz für die bisherige IF ...Zeile
for %%i in (%file%) do if /i "%%~xi"==".php" set tok=4
...
Grüße
Biber
Moin maccoX,
bevor T-Mo uns hier erwischt und uns beide zusammenfaltet:
Grüße
Biber
bevor T-Mo uns hier erwischt und uns beide zusammenfaltet:
- poste bitte deinen JETZERTLE verwendeten Schnipsel ( nicht dass wie von verschiedenen Code-Ständen ausgehen)
- setze bitte zu Testzwecken in eine der ersten Zeilen ein "echo on", bevor du den Schnipsel vom CMD-Prompt aus startest
- Setze nach der neuen IF-Zeile ein PAUSE
- und poste die Ausgabe, die bis zu diesem Punkt auf dem Schirm leuchtet
Grüße
Biber
Hallo maccoX!
Du brauchst als Übergabe an das Unterprogramm in diesem Fall ja aber nicht nur den Dateinamen "test.php", sondern auch die Aufrufparameter nach dem "?" - daher müsste die "
Wenn Du gleich noch etwas Ballast abwerfen möchtest, könnte sich das Ganze etwa so darstellen:
Anmerkung: "
Grüße
bastla
Du brauchst als Übergabe an das Unterprogramm in diesem Fall ja aber nicht nur den Dateinamen "test.php", sondern auch die Aufrufparameter nach dem "?" - daher müsste die "
if
"-Zeile dann so aussehen:echo %file%|findstr /i "\.php">nul && set "tok=4"
@echo off & setlocal
set "url=http://meinserver.de/daten/"
set "verzeichnis=..\daten\"
set "loadlist=load.xml"
for /f "usebackq tokens=2 delims=<> " %%a in ("%verzeichnis%%loadlist%") do call :load "%%a"
goto :eof
:load
echo %~1
set tok=5
echo %1|findstr /i "\.php">nul && set "tok=4"
echo %tok%
for /f "tokens=%tok% delims=/? " %%a in (%1) do set "filename=%%a"
echo load "%filename%"
curl -s %1 -o "%verzeichnis%%filename%"
goto :eof
echo off
", weil ohnehin viele "debug-echo
"-Zeilen enthalten sind ...Grüße
bastla
Hallo maccoX!
Dann vielleicht so:
Grüße
bastla
Dann vielleicht so:
@echo off & setlocal
set "url=http://meinserver.de/daten/"
set "verzeichnis=..\daten\"
set "loadlist=load.xml"
for /f "usebackq tokens=2 delims=<> " %%a in ("%verzeichnis%%loadlist%") do call :load "%%a"
goto :eof
:load
echo %~1
set tok=5
echo %1|findstr /i "\.php">nul && set "tok=4"
echo %tok%
for /f "tokens=%tok% delims=/? " %%a in (%1) do set "filename=%%a"
echo load "%filename%"
set "file=%~1"
curl -s "%file:amp;=%" -o "%verzeichnis%%filename%"
goto :eof
bastla