Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 3919 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 ..
Ähnliche Inhalte
PHP
Lange Liste und einige häsliche Schleifen (4)

Frage von WPFORGE zum Thema PHP ...

Netzwerkmanagement
gelöst 2 URLs über Gateway 1, Rest über Gateway 2 (4)

Frage von Funky86 zum Thema Netzwerkmanagement ...

Hosting & Housing
gelöst DDNS-Update über curl einrichten (2)

Frage von Static zum Thema Hosting & Housing ...

XML
XML Datei Fehler? (1)

Frage von Patrick-IT zum Thema XML ...

Neue Wissensbeiträge
Ubuntu

Ubuntu 17.10 steht zum Download bereit

(3)

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(8)

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(2)

Information von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Routers & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (20)

Frage von Dobby zum Thema Routers & Routing ...

Monitoring
Netzwerk-Monitoring Software (17)

Frage von Ghost108 zum Thema Monitoring ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (17)

Frage von liquidbase zum Thema Voice over IP ...

Windows 10
Windows 10 Ordnerfreigabe (15)

Frage von Xaero1982 zum Thema Windows 10 ...