Bestimmten Teil eines String aus einer XML-Datei auslesen
Hallo zusammen,
ich stehe vor folgendem Problem:
Ich habe eine XML-Datei die bspw. so aussieht:
...
<Url1>http://test:8080/Name/Version/...</Url1>
<Directory>C:\MeinVerzeichnis\test\..</Directory>
...
'Name' und 'Mein Verzeichnis' sind dabei variabel und können jedesmal unterschiedlich sein.
Das bedeutet ich muss den String ab"test:8080/" bis "/Version" auslesen.
Das bekomme ich leider nicht hin.
Gibt es die Möglichkeit das mit einem Batch-Script hinzubekommen?
Für Lösungsvorschläge wäre ich sehr dankbar.
Gruß
ich stehe vor folgendem Problem:
Ich habe eine XML-Datei die bspw. so aussieht:
...
<Url1>http://test:8080/Name/Version/...</Url1>
<Directory>C:\MeinVerzeichnis\test\..</Directory>
...
'Name' und 'Mein Verzeichnis' sind dabei variabel und können jedesmal unterschiedlich sein.
Das bedeutet ich muss den String ab"test:8080/" bis "/Version" auslesen.
Das bekomme ich leider nicht hin.
Gibt es die Möglichkeit das mit einem Batch-Script hinzubekommen?
Für Lösungsvorschläge wäre ich sehr dankbar.
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-Key: 283702
Url: https://administrator.de/contentid/283702
Ausgedruckt am: 28.03.2024 um 19:03 Uhr
13 Kommentare
Neuester Kommentar
Moin,
kein Problem mit einem "Hauch" Powershell in der Batch:
Oder noch kürzer mit sed:
Gruß jodel32
kein Problem mit einem "Hauch" Powershell in der Batch:
@echo off
set "file=C:\datei.xml"
powershell -ExecutionPolicy ByPass -Command "([xml](gc '%file%')).GetElementsByTagName('Url1').InnerText.split('/')[3]"
sed -nr 's/.*8080\/([^\/]*).*/\1/p' Datei.xml
Habe ein etwas größeres Batch-Script und würde dieses gerne behalten und erweitern.
Kannst du ja auch das da oben ist ja eine Batch ... naja hier noch eine mögliche pure Batch Old-School Variante:@echo off
for /f "tokens=3 delims=/" %%a in ('findstr /ic:"test:8080" "C:\demo.xml"') DO @echo %%a
kann ich nicht mehr anhand der / trennen sondern möchte ab dem "/test:8080/" bis "/Version" trennen.
ist das auch möglich?
ist das auch möglich?
@echo off & setlocal enabledelayedexpansion
for /f "tokens=2 delims=^>^<" %%a in ('findstr /ic:"test:8080" "C:\demo.xml"') DO @(
set "name=%%a"
set "name=!name:http://test:8080/=!"
set "name=!name:/Version/=|!"
for /f "tokens=1 delims=|" %%b in ("!name!") DO @echo %%b
)
Sons' noch nen Wunsch ?
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen.
Gruß jodel32
Zitat von @Dnis822:
Vielen Dank für Deine Mühe!
Das funktioniert leider nicht ganz bei mir.
Als Ausgabe erhalte ich !name!.
Dann hast du vergessen "delayed expansion" zu aktivieren und meine erste Zeile nicht richtig übernommen !Vielen Dank für Deine Mühe!
Das funktioniert leider nicht ganz bei mir.
Als Ausgabe erhalte ich !name!.
@echo off & setlocal enabledelayedexpansion
Siehe dazu:http://ss64.com/nt/delayedexpansion.htmlUnd zur Variablen-Stringersetzung in Zeile 4 und 5 siehe:
http://www.dostips.com/DtTipsStringManipulation.php
Weil du diese dann ebenfalls in der ersten Schleife als Delimiter deklarieren musst. Ich sag ja, absolut wasserdicht bekommst du das nur mit Powershell / sed und Regular Expressions wie oben beschrieben hin ... Ihr Batchler bekommt hier halt die Quittung das ihr euch nicht weiterbildet ;-P und an der Krüppelsprache Batch hängen bleibt.
EInfach einen Tab in die Liste der delimiter einfügen:
for /f "tokens=2 delims=^>^< "