Textteil mittel Batch ersetzen
Hallo zusammen,
tüfftle seit geraumerzeit an einem kleineren Problem, das ich aber noch nicht gelöstbekommen habe.
Ich habe eine xml Datei mit folgendem Aufbau:
Inhalt der Datei Settings.xml
<TAG1>abc</TAG1><TAG2>def</TAG2><TAG3>ghi</TAG3><TAG4>jkl</TAG4><Datei>Z:\www\xxx.yyy</Datei><TAG5>mno</TAG5>
<TAG4>jkl</TAG4><TAG2>def</TAG2><TAG1>abc</TAG1><TAG3>ghi</TAG3><TAG5>mno</TAG5><Datei>Z:\www\xxx.yyy</Datei>
Jede andere Mischung der Tags wäre auch noch denkbar.
Nun möchte ich, am liebsten mittels Batch (oder ggf auch VBS) die Daten zweier Tags ändern. Hier als Beispiel den Wert von <TAG3> und von <Datei> den neuen Wert, also ghi bzw. die Dateiangabe, möchte ich am Anfang das Batches angeben und am Ende des Batches möchte ich dann das verarbeitente Programm aufrufen.
IOch hatte auch schon den ein oder anderen Lösungsansatz, diese sind aber alle daran gescheitert, dass ich bei Verwendung des for /f Delims nur einzelne Zeichen aber keine Zeichenketten verwenden kann. Sprich, Sprich, wenn ich TAG3 eingeb dann teilt er ja sowohl nach T wie nach A wie nach G und nach 3. Das bringt mich also nicht weiter.
Hat jemand eine Idee?
LG, HW-Schrauber
tüfftle seit geraumerzeit an einem kleineren Problem, das ich aber noch nicht gelöstbekommen habe.
Ich habe eine xml Datei mit folgendem Aufbau:
Inhalt der Datei Settings.xml
<TAG1>abc</TAG1><TAG2>def</TAG2><TAG3>ghi</TAG3><TAG4>jkl</TAG4><Datei>Z:\www\xxx.yyy</Datei><TAG5>mno</TAG5>
<TAG4>jkl</TAG4><TAG2>def</TAG2><TAG1>abc</TAG1><TAG3>ghi</TAG3><TAG5>mno</TAG5><Datei>Z:\www\xxx.yyy</Datei>
Jede andere Mischung der Tags wäre auch noch denkbar.
Nun möchte ich, am liebsten mittels Batch (oder ggf auch VBS) die Daten zweier Tags ändern. Hier als Beispiel den Wert von <TAG3> und von <Datei> den neuen Wert, also ghi bzw. die Dateiangabe, möchte ich am Anfang das Batches angeben und am Ende des Batches möchte ich dann das verarbeitente Programm aufrufen.
IOch hatte auch schon den ein oder anderen Lösungsansatz, diese sind aber alle daran gescheitert, dass ich bei Verwendung des for /f Delims nur einzelne Zeichen aber keine Zeichenketten verwenden kann. Sprich, Sprich, wenn ich TAG3 eingeb dann teilt er ja sowohl nach T wie nach A wie nach G und nach 3. Das bringt mich also nicht weiter.
Hat jemand eine Idee?
LG, HW-Schrauber
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 159809
Url: https://administrator.de/forum/textteil-mittel-batch-ersetzen-159809.html
Ausgedruckt am: 22.04.2025 um 01:04 Uhr
15 Kommentare
Neuester Kommentar
Hallo HW-Schrauber!
Gerade XML / HTML mag ich per native Batch (wegen der Sonderzeichen "<" und ">") nicht soo gerne bearbeiten und greife lieber zu ein wenig (integriertem) VBS:
Die Zeile für das Starten des Bearbeitungsprogrammes muss ich (mangels Informationen darüber) Dir überlassen.
Grüße
bastla
Gerade XML / HTML mag ich per native Batch (wegen der Sonderzeichen "<" und ">") nicht soo gerne bearbeiten und greife lieber zu ein wenig (integriertem) VBS:
@echo off & setlocal
set "Datei=D:\settings.xml"
set "Von1=<TAG3>ghi</TAG3>"
set "Nach1=<TAG3>lmn</TAG3>"
set "Von2=<Datei>Z:\www\xxx.yyy</Datei>"
set "Nach2=<Datei>Z:\aaa\bbb.ccc</Datei>
set "R=%temp%\Replacer.vbs"
> %R% echo Set fso=CreateObject("Scripting.FileSystemObject"):T = fso.OpenTextFile("%Datei%").ReadAll
>>%R% echo fso.CreateTextFile("%Datei%").Write Replace(Replace(T,"%Von1%","%Nach1%"),"%Von2%","%Nach2%")
cscript //nologo %R%
Grüße
bastla

Servus,
Da es sich um eine Batch handelt, die ein VBS erzeugt, wäre es doch sinnvoll und simpel, wenn du dir alle Zeilen (speziell zeile 4) genauer anschaust und evt. mit Hilfe einer Dosbox und dem Befehl set mit parameter /? mal nachschaust, was die eigentlich macht.
Es soll den Parameter /P geben mit dem könnte man einen allerdings müste der bekannt sein variablen Wert benennen der ausgetauscht werden soll.
btw:
PS:
Gruß
Dann habe ich mich vermutlich unklar ausgedrückt.
Das was zu beginn zwischen den Tags steht, kenne ich nicht.
Ich möchte also diesen mir unbekannetn Eintrag gegen einen von mir definierten Eintrag tauschen.
Das was zu beginn zwischen den Tags steht, kenne ich nicht.
Ich möchte also diesen mir unbekannetn Eintrag gegen einen von mir definierten Eintrag tauschen.
Da es sich um eine Batch handelt, die ein VBS erzeugt, wäre es doch sinnvoll und simpel, wenn du dir alle Zeilen (speziell zeile 4) genauer anschaust und evt. mit Hilfe einer Dosbox und dem Befehl set mit parameter /? mal nachschaust, was die eigentlich macht.
Es soll den Parameter /P geben mit dem könnte man einen allerdings müste der bekannt sein variablen Wert benennen der ausgetauscht werden soll.
btw:
Sprich, Sprich, wenn ich TAG3 eingeb dann teilt er ja sowohl nach T wie nach A wie nach G und nach 3. Das bringt mich also nicht weiter.
Und warum hast du dann nicht "<>" als delims definiert?PS:
Dürfte ich dich noch mal um einen weiteren Anlauf bitten?
Mea culpa, aber nach der Bastlaschen und deiner Steilvorlage - genau dieses Thema hat der Bastla schon das eine oder andere mal gezimmert, das hätte man wirklich mit dem Produkt Forensuche finden können - hoffe ich dir keinen Einlauf sondern einen Ansatz, alleine weiterzukommen gegeben.Gruß
Hallo HW-Schrauber!
):
Das vom Batch erzeugte VBScript führt zwei Ersetzungen mittels RegEx durch (deswegen auch die Schreibweise der jeweiligen "Von"-Angaben mit ".*" für "beliebige Werte"). Die Daten dafür werden "maßgeschneidert" in den Programmcode eingebaut. Zu beachten: Die "settings.xml" wird (ohne Sicherungskopie) durch die neue Fassung ersetzt.
BTW: Wozu soll eigentlich "
Grüße
bastla
Dann habe ich mich vermutlich unklar ausgedrückt.
Ja; daher neuer Versuch (ist immer noch ein Batch @echo off & setlocal
set "Datei=%~dp0settings.xml"
set "Von1=<TAG3>.*</TAG3>"
set "Nach1=<TAG3>lmn</TAG3>"
set "Von2=<Datei>.*</Datei>"
set "Nach2=<Datei>Z:\aaa\bbb.ccc</Datei>"
set "R=%temp%\Replacer.vbs"
> %R% echo Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile("%Datei%").ReadAll:Set rE=New RegExp:rE.Global=True
>>%R% echo rE.Pattern="%Von1%":T=rE.Replace(T,"%Nach1%"):rE.Pattern="%Von2%":fso.CreateTextFile("%Datei%").Write rE.Replace(T,"%Nach2%")
cscript //nologo %R%
%~dp0xxx.exe
BTW: Wozu soll eigentlich "
call
" beim Aufruf der "xxx.exe" gut sein?Grüße
bastla
[OT] @bastla
[_] Ausbau der Vollbeschäftigung? Ankurbelung der 16-Kernel-Prozessoren-Entwicklung?
[_] Fehlende Kommentierung bleibt dadurch unbemerkt (Empfehlung von Houdini)
[_] Verwandte vom Land beeindrucken?
[_] ist eine alte Masche von Trickdieben - während die CMD.exe abgelenkt ist krabbelt ein Virus durch den Lüftungsschlitz.
Grüße auch an alle Günther J. Jauche dieser Welt.
Biber
[Edit] Re:@bastla
Als FDP-Imitator oder gar Vordenker wäre ich ungeeignet ...*gg
[Edit]
[/OT]
[_] Ausbau der Vollbeschäftigung? Ankurbelung der 16-Kernel-Prozessoren-Entwicklung?
[_] Fehlende Kommentierung bleibt dadurch unbemerkt (Empfehlung von Houdini)
[_] Verwandte vom Land beeindrucken?
[_] ist eine alte Masche von Trickdieben - während die CMD.exe abgelenkt ist krabbelt ein Virus durch den Lüftungsschlitz.
Grüße auch an alle Günther J. Jauche dieser Welt.
Biber
[Edit] Re:@bastla
Wo ist eigentlich die Option mit der FDP geblieben?
Da oben stehen doch nur Antworten..... etwas, was für mich vorstellbar ist ....Als FDP-Imitator oder gar Vordenker wäre ich ungeeignet ...*gg
[Edit]
[/OT]
[OT] @Biber
Wie's aussieht geht ja Dein Montag auch schön langsam zu Ende ...
Wo ist eigentlich die Option mit der FDP geblieben?
Grüße
bastla
[/OT]
Wie's aussieht geht ja Dein Montag auch schön langsam zu Ende ...
Wo ist eigentlich die Option mit der FDP geblieben?
Grüße
bastla
[/OT]
Hallo HW-Schrauber!
Und Du bist Dir ganz sicher, dass es im Ordner mit der Batch-Datei eine "settings.xml" gibt? Die wird nämlich an der in der Fehlermeldung genannten Position vom VBScript zu öffnen versucht.
Zu Testzwecken könntest Du ja in Zeile 2 nochmals einen absoluten Pfad schreiben ....
Grüße
bastla
[Edit] @Skyemugen
- auch, weil ich noch nicht so recht wusste, was noch drangeschraubt werden sollte ...
[/Edit]
Und Du bist Dir ganz sicher, dass es im Ordner mit der Batch-Datei eine "settings.xml" gibt? Die wird nämlich an der in der Fehlermeldung genannten Position vom VBScript zu öffnen versucht.
Zu Testzwecken könntest Du ja in Zeile 2 nochmals einen absoluten Pfad schreiben ....
Grüße
bastla
[Edit] @Skyemugen
aber irgendwie wäre hier ein reines .vbs doch schöner anzusehen oder nicht, bastla? ;)
Letzteres [/Edit]
Hmmm, HW-Schrauber,
ich frag mal ohne Kästchen (und alle Joker sind schon weg - Höchstens die D. Katzenbregen unter 11800 wäre erreichbar)...
Welche settings.xml hat den im Lauf der Schnipsel ihren Aufenthaltsort
von SET "Datei=D:\settings.xml"
nach set "Datei=%~dp0settings.xml" verlagert und könnte unauffindbar sein?
Grüße
Biber
ich frag mal ohne Kästchen (und alle Joker sind schon weg - Höchstens die D. Katzenbregen unter 11800 wäre erreichbar)...
Welche settings.xml hat den im Lauf der Schnipsel ihren Aufenthaltsort
von SET "Datei=D:\settings.xml"
nach set "Datei=%~dp0settings.xml" verlagert und könnte unauffindbar sein?
Grüße
Biber
Hallo HW-Schrauber!
Tja, bei mir sähe das (mit Deinen Testdaten von oben) so aus:
- allerdings nur, wenn die Schreibweise (inkl Groß-/Kleinschreibung) des Suchbegriffes (also etwa "<TAG3>") in Datei und Batch übereinstimmt ...
Wenn Du am Ende der Zeile 10 noch
hinzufügst, wird ein Unterschied in der Groß-/Kleinschreibung nicht berücksichtigt.
Grüße
bastla
Tja, bei mir sähe das (mit Deinen Testdaten von oben) so aus:
Z:\TEMP>type settings.xml
<TAG1>abc</TAG1><TAG2>def</TAG2><TAG3>ghi</TAG3><TAG4>jkl</TAG4><Datei>Z:\www\xx
x.yyy</Datei><TAG5>mno</TAG5>
Z:\TEMP>replacer
Z:\TEMP>type settings.xml
<TAG1>abc</TAG1><TAG2>def</TAG2><TAG3>lmn</TAG3><TAG4>jkl</TAG4><Datei>Z:\aaa\bb
b.ccc</Datei><TAG5>mno</TAG5>
Wenn Du am Ende der Zeile 10 noch
:rE.IgnoreCase=True
Grüße
bastla