Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

In einer xml Liste eingetragene URLs per cURL laden - 1. geht, wie Schleife drum rum bauen?

Frage Entwicklung Batch & Shell

Mitglied: maccoX

maccoX (Level 1) - Jetzt verbinden

12.05.2011 um 10:25 Uhr, 3887 Aufrufe, 17 Kommentare

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?

01.
set "file=" 
02.
for /f "tokens=2 delims=<> " %%a in ('more +1 %verzeichnis%%loadlist%') do if not defined file set file=%%a 
03.
echo %file% 
04.
for /f "tokens=5 delims=/ " %%a in ("%file%") do if not defined filename set filename=%%a 
05.
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
Mitglied: Skyemugen
12.05.2011 um 10:57 Uhr
Aloha,

nun, dann eventuell so:
01.
@echo off & setlocal 
02.
set "verzeichnis=%temp%\" 
03.
set "loadlist=bla.xml" 
04.
set "file=" 
05.
for /f "tokens=2 delims=<> " %%a in ('more +1 %verzeichnis%%loadlist%') do call :Ablauf "%%a" 
06.
pause 
07.
goto :eof 
08.
 
09.
:Ablauf 
10.
if not defined file set file=%1 
11.
echo %file% 
12.
for /f "tokens=5 delims=/ " %%a in (%file%) do if not defined filename set filename=%%a 
13.
echo "%filename%" 
14.
curl %file% -o "%verzeichnis%%filename%" 
15.
set file= 
16.
set filename= 
17.
goto :eof
greetz André

gut, man könnte eigentlich die if not defined-Sachen wegstreichen aber was soll's

edit: Mehr fliegende Zollstöcke ... und einige weg
Bitte warten ..
Mitglied: maccoX
12.05.2011 um 11:35 Uhr
Hey,

super, hab jetzt die "1" bei more +1 durch eine Variable ersetzt, die ich im Ablauf hochzähle, damit funktioniert es jetzt wunderbar

Danke!!!!

Gruß, maccoX
Bitte warten ..
Mitglied: Skyemugen
12.05.2011 um 11:48 Uhr
Aloha,

ah noch etwas, wo ich es gerade noch einmal gelesen habe
Hier wird dank 'more +1 %verzeichnis%%loadlist%' die erste Zeile der immer unterschiedlich langen xml ausgelesen.
... eigentlich wird ja die zweite Zeile und nicht die erste Zeile ausgelesen ;)

greetz André
Bitte warten ..
Mitglied: bastla
12.05.2011 um 12:28 Uhr
... vor allem, weil Du für die erste Zeile ja doch einfach
set /p filename=<"%file%"
verwenden würdest ...

Grüße
bastla
Bitte warten ..
Mitglied: maccoX
13.05.2011 um 15:57 Uhr
Hallo,

ja damit wird die 2. Zeile ausgelesen, ich meinte ja die 1. "Inhaltszeile" :D


Ich hab allerdings noch ein Problem das mir gerade aufgefallen ist:

Ich hab auch eine PHP URL mit Variablenübergabe in der xml:
01.
<item>http://meinserver.de/files/test.php?var1=hallo&amp;var2=welt</item>
Bis zum curl Befehl oder sonst wo komm ich damit erst gar nicht, denn schon beim Auslesen aus der XML mit
01.
for /f "tokens=2 delims=<> " %%a in ('more +1 %verzeichnis%%loadlist%') do call :Ablauf %%a
geht etwas schief. Nach dem Ausschlussprinzip mag die Funktion weder den Stichpunkt, noch das Gleichzeichen oder Undzeichen
... als einziges Sonderzeichen wird wohl das Fragezeichen geschluckt.

Kann man da was machen?

Gruß, maccoX
Bitte warten ..
Mitglied: Skyemugen
13.05.2011 um 16:48 Uhr
Aloha,

jo, kann man:
edit siehe Änderung oben im Skript

wobei ... eigentlich überflüssig, denn du kannst ja keinen derartigen Dateinamen anlegen *gg* (das Fragezeichen würde wegfallen)

greetz André

P.S.: sind das nicht eigentlich dann tokens=4 statt 5 in der zweiten Schleife? ...
Bitte warten ..
Mitglied: maccoX
14.05.2011 um 10:28 Uhr
Hallo,

danke werds gleich mal testen!

Den Dateinamen will ich eigentlich noch mit einem angepassten %filename% abfangen, so das nur noch ein test.php übrig bleibt.


EDIT: Scheint wunderbar zu funktionieren - super
Leider etwas blöd, dass die PHP Datei ein Verzeichnis höher auf dem Server liegt wie die restlichen Dateien ... sonst wär ich jetzt schon am Ziel, habe nämlich beim 2. Find Befehl bei Delims noch ein "?" rein gemacht - bloß bräuchte ich jetzt halt bei der .php nur Tokens 4, bei den restlichen Dateien immer Tokens 5 ...


Schönes Wochenende,
maccoX
Bitte warten ..
Mitglied: bastla
14.05.2011 um 10:55 Uhr
Hallo macoonX!

Wenn ich das soweit richtig gesehen habe, brauchst Du doch eigentlich nur eine Variable zu verwenden - ungetestet etwa so:
01.
set tok=5 
02.
if /i "%~x1"==".php" set tok=4 
03.
for /f "tokens=%tok% delims=/ " %%a in (%file%) do set "filename=%%a"
Übrigens sollte sich eigentlich %file% durch %1 ersetzen lassen ...

Grüße
bastla
Bitte warten ..
Mitglied: maccoX
14.05.2011 um 11:12 Uhr
Guten Morgen!

das scheint genau das zu sein was ich brauche, allerdings scheint der if Befehl nicht zu greifen, tok bleibt leider stets 5.

Gruß, maccoX
Bitte warten ..
Mitglied: Biber
14.05.2011 um 11:32 Uhr
Moin maccoX,

Zitat von maccoX:
..., allerdings scheint der if Befehl nicht zu greifen, tok bleibt leider stets 5.
bastlas Zeile
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
Bitte warten ..
Mitglied: maccoX
14.05.2011 um 11:49 Uhr
Morgen Biber,

auch mit der Zeile will es irgendwie nicht. Tok ist weiterhin 5.


Gruß
maccoX
Bitte warten ..
Mitglied: Biber
14.05.2011 um 11:55 Uhr
Moin maccoX,

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
Bitte warten ..
Mitglied: maccoX
14.05.2011 um 12:23 Uhr
Hallo Biber,

also hier die bat:
01.
@echo on 
02.
 
03.
set "url=http://meinserver.de/daten/" 
04.
set "verzeichnis=..\daten\" 
05.
set "loadlist=load.xml" 
06.
 
07.
set zeile=1 
08.
 
09.
for /f "tokens=2 delims=<> " %%a in ('more +%zeile% %verzeichnis%%loadlist%') do call :load "%%a" 
10.
goto :eof 
11.
 
12.
:load 
13.
set "filename=" 
14.
set /a zeile=zeile+1 
15.
set file=%1 
16.
echo %file% 
17.
set tok=5 
18.
for %%i in (%file%) do if /i "%%~xi"==".php" set tok=4  
19.
echo %tok% 
20.
pause 
21.
for /f "tokens=%tok% delims=/? " %%a in (%file%) do if not defined filename set "filename=%%a"  
22.
echo load "%filename%" 
23.
curl -s %file% -o "%verzeichnis%%filename%"  
24.
goto :eof
...und hier die Ausgabe:

01.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>set "url=http://meinserver.de/daten/" 
02.
 
03.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>set "verzeichnis=..\daten\" 
04.
 
05.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>set "loadlist=load.xml" 
06.
 
07.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>set zeile=1 
08.
 
09.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>for /F "tokens=2 delims=<> " %a in ('more +1 ..\daten\load.xml') do call :load "%a 
10.
11.
 
12.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>call :load "http://meinserver.de/phps/test.php?var1=hallo&amp;var2=welt" 
13.
 
14.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>set "filename=" 
15.
 
16.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>set /a zeile=zeile+1 
17.
 
18.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>set file="http://meinserver.de/phps/test.php?var1=hallo&amp;var2=welt" 
19.
 
20.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>echo "http://meinserver.de/phps/test.php?var1=hallo&amp;var2=welt" 
21.
"http://meinserver.de/phps/test.php?var1=hallo&amp;var2=welt" 
22.
 
23.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>set tok=5 
24.
 
25.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>for %i in ("http://meinserver.de/phps/test.php?var1=hallo&amp;var2=welt") do if /I "%~xi" == ".php" set tok=4 
26.
 
27.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>echo 5 
28.
29.
 
30.
C:\Dokumente und Einstellungen\Administrator\Desktop\ms\fscommand>pause 
31.
Drücken Sie eine beliebige Taste . . .
Gruß, maccoX
Bitte warten ..
Mitglied: bastla
14.05.2011 um 12:31 Uhr
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 "if"-Zeile dann so aussehen:
echo %file%|findstr /i "\.php">nul && set "tok=4"
Wenn Du gleich noch etwas Ballast abwerfen möchtest, könnte sich das Ganze etwa so darstellen:
01.
@echo off & setlocal 
02.
 
03.
set "url=http://meinserver.de/daten/" 
04.
set "verzeichnis=..\daten\" 
05.
set "loadlist=load.xml" 
06.
 
07.
for /f "usebackq tokens=2 delims=<> " %%a in ("%verzeichnis%%loadlist%") do call :load "%%a" 
08.
goto :eof 
09.
 
10.
:load 
11.
echo %~1 
12.
set tok=5 
13.
echo %1|findstr /i "\.php">nul && set "tok=4" 
14.
echo %tok% 
15.
for /f "tokens=%tok% delims=/? " %%a in (%1) do set "filename=%%a"  
16.
echo load "%filename%" 
17.
curl -s %1 -o "%verzeichnis%%filename%"  
18.
goto :eof
Anmerkung: "echo off", weil ohnehin viele "debug-echo"-Zeilen enthalten sind ...

Grüße
bastla
Bitte warten ..
Mitglied: maccoX
14.05.2011 um 13:30 Uhr
Hallo Bastla,

jetzt klappt das mit dem Token If - Danke!!


Nur mein Curl will mich jetzt noch ärgern ... einfach nur gemein :D
01.
http://meinserver.de/phps/test.php?var1=hallo&amp;var2=welt
will curl leider nicht laden. Wenn ich "amp;" hinter dem "&" rauslösche, also die Formatierung ändere geht es. Dumm nur, das ich Curl auch unter Mac OS X verwende und dort brauche ich mit dem Applescript und allem eben genau diese "&amp;" Formatierung ... so ein Mist
... und von den amps gibt es sogar 4 Stück, da ich 5 Variablen an der php dran hängen hab.

Ich vermute mal da kann man so jetzt nichts machen, oder?

Gruß,
maccoX
Bitte warten ..
Mitglied: bastla
14.05.2011 um 13:38 Uhr
Hallo maccoX!

Dann vielleicht so:
01.
@echo off & setlocal 
02.
 
03.
set "url=http://meinserver.de/daten/" 
04.
set "verzeichnis=..\daten\" 
05.
set "loadlist=load.xml" 
06.
 
07.
for /f "usebackq tokens=2 delims=<> " %%a in ("%verzeichnis%%loadlist%") do call :load "%%a" 
08.
goto :eof 
09.
 
10.
:load 
11.
echo %~1 
12.
set tok=5 
13.
echo %1|findstr /i "\.php">nul && set "tok=4" 
14.
echo %tok% 
15.
for /f "tokens=%tok% delims=/? " %%a in (%1) do set "filename=%%a"  
16.
echo load "%filename%" 
17.
set "file=%~1" 
18.
curl -s "%file:amp;=%" -o "%verzeichnis%%filename%"  
19.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: maccoX
14.05.2011 um 13:50 Uhr
Hallo bastla,

wirklich großartig, so ein winziges Stückchen Code und schon ist alles gut - danke!!


Euch Allen ein großes, großes DANKE! - wirklich super!

Wünsche euch noch ein super Wochenende!

Gruß,
maccoX
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
gelöst Xml-Datei laden bzw. auf Festplatte kopieren und per VBA in eine Access-Tabelle speichern (22)

Frage von machohunk zum Thema VB for Applications ...

Batch & Shell
XML nach Liste mit Werten durchsuchen (12)

Frage von bocker zum Thema Batch & Shell ...

Batch & Shell
CMD cURL Access Token parsen (2)

Frage von maddig zum Thema Batch & Shell ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (23)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (19)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...