for /f
- Schleifentyp der Streams zeilenweise verarbeitet.
"tokens=2 delims=<>"
- die Zeile wird an den Delimitern (Trennzeichen)< und > in Tokens (Teile) zerlegt. Das 2. Token wird der Schleifenvariable zugewiesen. Hier war mein Fehler. Ausgehend vom XML das
@Mat gepostet hat, bin ich davon ausgegangen dass die Zeilen eingerückt sind. In diesem Fall wären die Leerzeichen der Einrückung ein zusätzliches Token gewesen. Scheint aber in der Realität nicht der Fall zu sein.
%%p in ('...') do
- Schleifenvariable und Syntax um das StdOut der Kommandozeile zwischen den beiden einfachen Anführungszeichen zu verarbeiten
echo %%p
- Ausgabe des Wertes der Schleifenvariablen
^>nul chcp 65001^&curl -s "http://fritz.box/juis_boxinfo.xml"^|find /i "<q:Provider>"
Kommandozeile, die ausgeführt wird. Hier müssen einige Zeichen durch ein ^ escaped werden, da die Zeile doppelt geparst wird. Einmal im Scriptmodus für die gesamte Schleife und einmal im Kommandozeilenmodus für die Ausführung der Kommandozeile zwischen den einfachen Anführungszeichen. Ohne diese Carets sieht das so aus:
>nul chcp 65001&curl -s "http://fritz.box/juis_boxinfo.xml"|find /i "<q:Provider>"
>nul chcp 65001
- Änderung der Zeichencodierung von StdIn und StdOut, die Erfolgsmeldung wird per >nul ins Nirvana geschickt. Die ID 65001 ist für UTF-8, weil XML per Default UTF-8 codiert ist, wenn nicht anders angegeben. Falls du nur ASCII in deinem gesuchten Wert erwartest, kannst du das auch rauswerfen.
&
- Verkettung von Kommandos
curl -s "http://fritz.box/juis_boxinfo.xml"
- Gibt den Quelltext des URL Ziels zum StdOut aus. Das -s unterdrückt in diesem Fall die Fortschrittsmeldung.
|
- Weiterleitung des StdOut an das StdIn des nächsten Kommandos.
find /i "<q:Provider>"
- Filtere die Zeile aus, die den String <q:Provider> enthält.