kartoffelpelle
Goto Top

BATCH: For-Schleife mit type und find laufbar machen

Guten Tag,

ich habe folgendes Problem. Ich habe eine XML-Datei, die etwa wie folgt aussieht:
<?xml version="1.0" encoding="utf-8"?>  
<preset>
  <Address>
    <txtNumber>123</txtNumber>
  </Address>
</preset>

Ich möchte gern den Wert zwischen <txtNumber> und </txtNumber> in eine Variable schreiben


Ich scheitere leider bereits daran, die komplette Zeile in eine Variable zu schreiben (der Plan ist, den Rest dann links und rechts weg zu schneiden).

Ich habe bereits einiges getestet. Leider habe ich es bisher besten Falls geschafft, den Text "type" in die Variable Last zu schreiben.

Anbei ein entsprechender Versuch:
set HomeDir=C:\Test
for /f %%i in ('type %HomeDir%\Settings.xml ^| find /i "<txtNumber>"') do set Last=%%i  
echo %last%

Ich schaffe es einfach nicht, die Befehle zwischen den Klammern korrekt zu escapen. Habt ihr eventuell eine Idee?

Vielen Dank!

Mit freundlichen Grüße
Kartoffelpelle

Content-ID: 436013

Url: https://administrator.de/contentid/436013

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

TripleDouble
Lösung TripleDouble 03.04.2019 um 14:43:09 Uhr
Goto Top
Hallo,

versuch für den Anfang mal:

set HomeDir=C:\Test
for /f %%i in ('type %HomeDir%\Settings.xml ^| find /i "<txtNumber>"') do set "Last=%%i"  
echo "%last%"  

Dann hast Du schonmal die Zeile in der Variablen und kannst Dich dann um den Wert kümmern.

Gruß - TD
rubberman
Lösung rubberman 03.04.2019 um 15:43:40 Uhr
Goto Top
Überleg mal wie die ECHO Zeile aussieht, wenn du die Variable auflöst und welche Bedeutung < und > dann bekommen. Passe doch deine FOR /F Schleife so an, dass du von vorn herein nur den Wert in der Variablen hast.
for /f "tokens=3 delims=<>" %%i in ('type "%HomeDir%\Settings.xml" ^| find /i "<txtNumber>"') do set "Last=%%i"  
Dass man XML nur über das DOM vernünftig verarbeiten kann (in Batch nicht verfügbar), sollte dir aber bewusst sein. Wenn das komplette XML nur aus einer Zeile bestehen würde oder ohne jeglichen Zeileneinzug vorgegeben wäre, dann ist das immer noch genauso valide. Bloß für dich nicht mehr verarbeitbar.

Steffen
erikro
erikro 03.04.2019 um 16:30:25 Uhr
Goto Top
Moin,

ich empfehle Dir dringend, bei dem Problem die Powershell zu benutzen, mit der Du relativ leicht auf eine XML-Struktur zugreifen kannst.
https://www.langlitz-it.de/?p=1297
https://www.ip-insider.de/xml-bearbeitung-mit-der-powershell-a-66086/
https://www.heise.de/ix/artikel/Datenzugriff-506816.html?artikelseite=&a ...

hth

Erik
Kartoffelpelle
Kartoffelpelle 04.04.2019 um 08:42:34 Uhr
Goto Top
Hallo eriko,

vielen Dank für die schnelle Hilfestellung! Powershell ist aber leider keine Option, das hätte ich eingangs vielleicht etwas besser verdeutlichen sollen. Ich versuche beim nächsten Mal daran zu denken. Mir ist aber bewusst, dass es damit oder mit einem Parser einfacher umsetzbar wäre.

Viele Grüße
Kartoffelpelle
Kartoffelpelle
Kartoffelpelle 04.04.2019 um 08:53:36 Uhr
Goto Top
Hallo TripleDouble,

vielen Dank. Ich wäre vermutlich nie darauf gekommen, dass ich die Variable hinter dem Echo in Anführungszeichen setzen muss. Ich war mir totsicher, dass der Fehler in der For-Schleife liegt. Jetzt wo ich es sehe ist es natürlich klar. Manchmal hat man eben Scheuklappen vor den Augen.

Viele Grüße
Kartoffelpelle
Kartoffelpelle
Kartoffelpelle 04.04.2019 um 09:19:52 Uhr
Goto Top
Hallo rubberman,

deine Variante ist klasse und genau, dass was ich brauche! Wieder einmal vielen Dank!

Ich wäre vermutlich nie darauf gekommen, dass "Echo" in das Problem verursacht. Ich war mir totsicher, dass der Fehler in der For-Schleife liegt. Jetzt wo ich es sehe ist es natürlich klar. Manchmal hat man eben Scheuklappen vor den Augen.

Ich war fast schon so weit, die dilettantische Anfänger-Variante zu nehmen... "die Zeile in eine temporäre Text-Datei zu schreiben und von da in eine Variable einzulesen."

Ursprünglich war es auch mein Plan, die Forschleife entsprechend deiner Variante zu modifizieren. Irgendwann war ich jedoch so verzweifelt, dass ich überhaupt irgendetwas aus der Schleife zurückgemeldet bekommen wollte. Da war es mir auch Recht, den Text in der Variablen zu modifizieren.

Viele Grüße
Kartoffelpelle