Top-Themen

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?

Mitglied: maccoX

maccoX (Level 1) - Jetzt verbinden

12.05.2011 um 10:25 Uhr, 3934 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
Batch & Shell
XML nach Liste mit Werten durchsuchen
Frage von bockerBatch & Shell12 Kommentare

Guten Morgen. Ich habe folgendes Problem: Ich habe eine XML Datei mit etlichen Angaben die ca 30.000 Datensätze hat. ...

PHP

Lange Liste und einige häsliche Schleifen

Frage von WPFORGEPHP4 Kommentare

Ich bekomme eine Liste mit ca. 16 Mio Koordinaten (timestamp,value). Die Liste ist nach timestamp aufsteigend geordnet. Jetzt soll ...

Hardware

PC geht an und unter 1 Sekunde wieder aus

gelöst Frage von coataktia92Hardware6 Kommentare

Hallo, hab nen neuen PC zusammengebaut: Intel Core i5-6600k KFA² GeForce GTX 970 EXOC Black Edition G.Skill Ripjaws V ...

Netzwerkmanagement

2 URLs über Gateway 1, Rest über Gateway 2

gelöst Frage von Funky86Netzwerkmanagement4 Kommentare

Hallo an Alle! Ich komme bei einem Problem nicht so richtig weiter. Folgende Konstellation ist aufgebaut (habe ich so ...

Neue Wissensbeiträge
Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 6 StundenSicherheit

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 16 StundenInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Erkennung und -Abwehr

Ups: Einfaches Nullzeichen hebelte den Anti-Malware-Schutzt in Windows 10 aus

Information von kgborn vor 1 TagErkennung und -Abwehr

Windows 10 ist das sicherste Windows aller Zeiten, wie Microsoft betont. Insidern ist aber klar, das es da Lücken, ...

Windows 10

Windows 10 on ARM: von Microsoft entfernte Info - Klartext, was nicht geht

Information von kgborn vor 1 TagWindows 10

Windows 10 on ARM ist ja eine neue Variante, die Microsoft im Verbund mit Geräteherstellern am Markt etablieren will. ...

Heiß diskutierte Inhalte
Server
Route-Befehl Unterstützung (unter CMD)
gelöst Frage von FKRR56Server36 Kommentare

Guten Tag , i.M. habe ich Probleme über den CMD-Route-Befehl ein Routing auf einen entfernten Server zuzulassen. Der Server ...

Windows 10
Windows 10 (1709) Tastur und Maus wieder einschalten?
Frage von LochkartenstanzerWindows 1028 Kommentare

Moin, Ich habe von einem Kunden einen Win10-Rechner bekommen, bei dem weder Tastatur noch Maus geht. Die Hardware funktioniert ...

Microsoft
TV-Tipp: Das Microsoft-Dilemma
Information von kgbornMicrosoft17 Kommentare

Aktuell gibt es in Behörden und in Firmen eine fatale Abhängigkeit von Microsoft und dessen Produkten. Planlos agieren die ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser15 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...