ganzbaf
Goto Top

Mit Batch XML Tags ergänzen

Servus beinand,

Ich möchte gerne mit Native Batch Befehlen alle XML-Dateien in einem Verzeichnis folgendermaßen ergänzen:
Aus:
<header>
</header>
<record>
</record>
<record>
</record>
<footer>
</footer>
soll werden:
<header>
</header>
<body>
<record>
</record>
<record>
</record>
</body>
<footer>
</footer>

Bisher bin ich soweit:

@echo off & setlocal enableDelayedExpansion
for %%i In (%BASE_DIR%\input\*.xml) do (
rem Zeile </header> finden
for /f "delims=:" %%s in ('findstr /r /i /n "$\/header\>" %%i') do if not defined Zeile set Zeile=%%s  
echo %%~ni: Zeile %Zeile% >> %BASE_DIR%\LOG\Zeile.txt
rem Zeile danach einsetzen
rem Zeile <footer> finden
rem Zeile davor einsetzen
)

Kann mir bitte jemand sagen, ob ich auf dem richtigen Weg bin. Insbesondere würde mich interessieren, wo mein Suchausdruck falsch ist, weil mein Zeilen-Log immer leer bleibt.

Für ernstgemeine Batch-Schnipsel bin ich immer dankbar.

Gruß, Ganzbaf

Content-Key: 117009

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

Ausgedruckt am: 28.03.2024 um 22:03 Uhr

Mitglied: 77559
77559 28.05.2009 um 15:49:47 Uhr
Goto Top
Hallo Ganzbaf,

das $ Zeichen steht in einer RegEx für das Zeilenende und macht in deinem Findstr kiene Sinn.

Ausserdem kannst due in einem CMd Fenster die Befehle manuell testen bevor du sie in einem Batch einbaust.
Die Environment Variablen in deiner Zeile 02 hast du schon ausserhalb der Batch datei gesetzt?

Gruß
LotPings
Mitglied: ganzbaf
ganzbaf 28.05.2009 um 16:42:28 Uhr
Goto Top
Hallo,

Also die Umgebungsvariablen habe ich schon vorher gesetzt und das $-zeichen habe ich rausgenommen. (hatte geglaubt, das passt, weil ich am Zeilenende suche)

Damit wäre der Batch jetzt so:

@echo off & setlocal enableDelayedExpansion
set BASE_DIR=D:\TEST
for %%i In (%BASE_DIR%\input\*.xml) do (
rem Zeile </header> finden
set Zeile=
for /f "delims=:" %%s in ('findstr /r /i /n "\/header\>" "%%i"') do if not defined Zeile set Zeile=%%s  
echo %%~ni: Zeile %Zeile% >> %BASE_DIR%\LOG\Zeile.txt
rem Zeile danach einsetzen
rem Zeile <footer> finden
rem Zeile davor einsetzen


Wenn ich am Prompt
for /f "delims=:" %s in ('findstr /r /i /n "\/header\>" %BASE_DIR%\INPUT\ABC.XML') do if not defined Zeile set Zeile=%s  
eingebe, wird die richtige Zeilennummer für die Datei zurückgegeben.