Zeichen in .txt durch batch ersetzen
Hi,
ich habe ich in dem Forum schon etwas umgeschaut, aber ich bin nicht an mein Ziel gekommen.
Ich benötige eine batch-Datei, die mir in einer txt-Datei (z.B. test.txt) nach den Zeichen < > sucht und diese beide Zeichen durch ein Leerzeichen ersetzt.
Ich bin für jede Hilfe dankbar.
Vielen Dank schon mal
Matze
ich habe ich in dem Forum schon etwas umgeschaut, aber ich bin nicht an mein Ziel gekommen.
Ich benötige eine batch-Datei, die mir in einer txt-Datei (z.B. test.txt) nach den Zeichen < > sucht und diese beide Zeichen durch ein Leerzeichen ersetzt.
Ich bin für jede Hilfe dankbar.
Vielen Dank schon mal
Matze
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 115410
Url: https://administrator.de/forum/zeichen-in-txt-durch-batch-ersetzen-115410.html
Ausgedruckt am: 05.04.2025 um 06:04 Uhr
8 Kommentare
Neuester Kommentar

Möchtest du eine .txt in eine .bat umwandeln oder möchtest du einen Text durchsuchen lassen ?
Moin mabue88,
dazu wäre ein 5-Zeiler in VBSkript eleganter und angebrachter.
Hatten wir auch schon mehrfach - suche mal nach "ReadAll" in der Forumssuche
Grobe Skizze für eine schnipsel.vbs [absolut ungetestet]
Grüße
Biber
dazu wäre ein 5-Zeiler in VBSkript eleganter und angebrachter.
Hatten wir auch schon mehrfach - suche mal nach "ReadAll" in der Forumssuche
Grobe Skizze für eine schnipsel.vbs [absolut ungetestet]
strQuelle = "c:\test\original\DeinText.txt"
' strZiel = "c:\test\kopie\Deintext.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
strContent = Replace(Replace(fso.OpenTextFile(strQuelle, 1).ReadAll, "<",""), ">",""))
WScript.echo strContent
....
' und dann strContent in eine neue (oder alte) Datei schreiben.
...
Grüße
Biber
Hi!
Nicht schön, aber einfach:
Nutzer in der Batch-Datei "SED": http://gnuwin32.sourceforge.net/packages/sed.htm
Damit kannst Du richtig einfach Zeichen ersetzen.
Phil
Nicht schön, aber einfach:
Nutzer in der Batch-Datei "SED": http://gnuwin32.sourceforge.net/packages/sed.htm
Damit kannst Du richtig einfach Zeichen ersetzen.
Phil
Hi,
damit ist doch die Frage von mabue88, wie man das mit einem Batch-Skript löst, nicht beantwortet, oder?
Ich hab nämlich ein ähnliches Problem:
Ich habe ein Skript geschrieben, welches aus einer Ersetzungsliste den "Suchstring" und den "Ersetzenstring" holt und in einer Datei die entsprechenden Strings sucht und durch einen anderen ersetzt.
Dies alles klappt auch wunderbar -jedenfalls in meiner angelegten Testdatei -. Nun habe ich das Problem, dass in der Eigentlichen Textdatei auch das Zeichen ">" vorkommt, welches zum folgenden Problem führt.
Beispiel:
Ersetzungsliste:
String1|String2
String3|String4
Meine Testdatei sah vorher so aus:
text text etxt text text String1 Test text text bla bla bla
bla blubb blubber bla bla text String3 bla blubb text text
´
Nach ausführen des Skriptes sah die Testdatei so aus:
text text etxt text text String2 Test text text bla bla bla
bla blubb blubber bla bla text String4 bla blubb text text
Also zunächst alles schön und gut. Habe mich natürlich gefreut, dass das so gut klappt.
Jetzt ist es aber so, dass die eigentlich Originaldatei beispielsweise so aussieht:
text text etxt text text <String1> Test text text bla bla bla
bla blubb blubber bla bla text <String3> bla blubb text text
Und schon funktioniert das Skript nicht mehr. Stattdessen werden Dateien Namens: "Test" und "bla" angelegt, die als inhalt dn String bis tzu diesem Zeichen festhalten (z.B.: text text etxt text text <String1)
Dummerweise wird das Zeichen ">" beim suchen als falsch interpretiert. Anstatt dieses Zeichen als einfaches Textzeichen zu behandeln, wird es als Befehl, die vorhergehenden Zeichen in die Datei mit dem Namen, der nach dem ">" folgenden Zeichenkette, zu schreiben.
Hat da jemand ne Idee, wie ich es schaffe, dass das ">" als einfaches Textzeichen behandelt wird?
damit ist doch die Frage von mabue88, wie man das mit einem Batch-Skript löst, nicht beantwortet, oder?
Ich hab nämlich ein ähnliches Problem:
Ich habe ein Skript geschrieben, welches aus einer Ersetzungsliste den "Suchstring" und den "Ersetzenstring" holt und in einer Datei die entsprechenden Strings sucht und durch einen anderen ersetzt.
Dies alles klappt auch wunderbar -jedenfalls in meiner angelegten Testdatei -. Nun habe ich das Problem, dass in der Eigentlichen Textdatei auch das Zeichen ">" vorkommt, welches zum folgenden Problem führt.
Beispiel:
Ersetzungsliste:
String1|String2
String3|String4
Meine Testdatei sah vorher so aus:
text text etxt text text String1 Test text text bla bla bla
bla blubb blubber bla bla text String3 bla blubb text text
´
Nach ausführen des Skriptes sah die Testdatei so aus:
text text etxt text text String2 Test text text bla bla bla
bla blubb blubber bla bla text String4 bla blubb text text
Also zunächst alles schön und gut. Habe mich natürlich gefreut, dass das so gut klappt.
Jetzt ist es aber so, dass die eigentlich Originaldatei beispielsweise so aussieht:
text text etxt text text <String1> Test text text bla bla bla
bla blubb blubber bla bla text <String3> bla blubb text text
Und schon funktioniert das Skript nicht mehr. Stattdessen werden Dateien Namens: "Test" und "bla" angelegt, die als inhalt dn String bis tzu diesem Zeichen festhalten (z.B.: text text etxt text text <String1)
Dummerweise wird das Zeichen ">" beim suchen als falsch interpretiert. Anstatt dieses Zeichen als einfaches Textzeichen zu behandeln, wird es als Befehl, die vorhergehenden Zeichen in die Datei mit dem Namen, der nach dem ">" folgenden Zeichenkette, zu schreiben.
Hat da jemand ne Idee, wie ich es schaffe, dass das ">" als einfaches Textzeichen behandelt wird?
Ich benutze gar kein Tool. Wird alles mit Batch-Skript Befehlen gelöst.
Ich hab aber jetzt ne Möglichkeit gefunden, wie er das Zeichen nicht als Steuerzeichen verwendet, jedoch habe ich dann an der Stelle die "Anführungszeichen" zu viel.
Wenn ich beim zurückschreiben der geänderten Zeile:
t= temp.tmp
L= 'Die Zeile mit den Ersetzten Werten'
Das Ergebins ist dann jedoch nicht mehr <String2>, sondern "<String2>"
Soll eigentlich nicht so sein.
Ich hab aber jetzt ne Möglichkeit gefunden, wie er das Zeichen nicht als Steuerzeichen verwendet, jedoch habe ich dann an der Stelle die "Anführungszeichen" zu viel.
Wenn ich beim zurückschreiben der geänderten Zeile:
t= temp.tmp
L= 'Die Zeile mit den Ersetzten Werten'
"%t%" ECHO "%L%" STATT: >>"%t%" ECHO %L% schreibe, dann geht es.
Das Ergebins ist dann jedoch nicht mehr <String2>, sondern "<String2>"
Soll eigentlich nicht so sein.
Ich bin mittlerweile am überlegen, ob ich das nicht besser mit VB lösen sollte, aber da hab ich auch leider nicht wirklich einen Plan wie. Ich hab in VB auch nur Basics drauf. Prinzipiell wäre es für mich kein Problem so lange zu tüfteln und zu suchen bis ich mir es selbst beigebracht habe, wenn da nicht der Zeitdruck wäre.
Ich versuche mal mein Problem (möglichst verständlich) zu erklären:
HINTERGRUNDINFORMATION
Ich bin auf meiner Arbeit verantwortlich für die Administration sämtlicher Korrespondenzvorlagen. Diese Brief- und Vertragsvorlagen basieren aber nicht auf Word. Wir verwenden dafür ein Korrespondenz-tool namens Thunderhead, welches wie eine Art Content Management System funktioniert.
Die Vorlagen werden über das "Business Content Studio" erstellt. Diese Vorlagen bestehen jedoch nicht nur aus einfachem Text sondern auch aus Datenbankfeldern, sog. manuelle Felder (die bei der Brieferstellung über eine Eingabemaske befüllt werden) und diversen Regeln, die einzelne Textpassagen in Abhängigkeit von den Eingaben steuern.
Nun kam unsere IT auf die Idee Die Datenbanken nicht mehr getrennt für Deutschland und International zu verwalten, sondern nur noch eine globale Datenbank zu verwenden. Dies hat zur Folge, dass die Datenbankfelder nun andere Namen haben.
Für mein Team heißt das nun, dass wir in jedes Template hingehen und die alten Datenbankfelder(bzw. Platzhalter) gegen die nun neuen Felder austauschen müssen. Bei einem Scope von ca. 500 Vorlagen und durchschnittlich 20 Feldern pro Vorlage, wäre das einige Wochen arbeit.
Da die Templates aber auf dem Server in Form von XML-Dateien liegen, kam mir die Idee, dass wir nicht über das Tool arbeiten, sondern direkt in der Rohdatei (XML-Datei), über ein Suchen / Ersetzen Skript die entsprechenden Felder austauschen.
Die XML-Datei sieht in etwa so aus (Ausschnitt):
<?xml version="1.0" ?>
- <!-- generated by Thunderhead.Content, Version=3.0.12.0, Culture=neutral, PublicKeyToken=84c666f5e68a8973
-->
- <docdef version="3.0" bo-name="Human_Resources" bo-class="Th_180000251*_Human_Resources" styleset="190000626">
<script language="JavaScript" />
- <channel channel="2" template="190000624">
<sectionmap section="Letter Block" region="Letter Body" />
<sectionmap section="Page Number" region="Page Number" />
<sectionmap section="Letter Footer" region="Footer" />
<sectionmap section="DB Logo" region="Company Logo" />
<sectionmap section="Adressblock Customer" region="Address Customer" />
<sectionmap section="Adress DB" region="Address DB" />
- <setproperty name="display-width">
<string>210mm</string>
</setproperty>
</channel>
- <section id="2" name="Document" edit-groups="*">
- <section id="57" name="DB Logo">
- <fraglink id="73" resid="190000861">
- <argvalue name="Unternehmen">
<var name="Human_Resources.db_people_Datenfelder.Absenderinformationen.Unternehmen" type="string" />
</argvalue>
- <argvalue name="Region">
<var name="Human_Resources.db_people_Datenfelder.Absenderinformationen.Region" type="string" />
</argvalue>
</fraglink>
</section>
In diesem XML-Ausschnitt befinden sich zwei Datenbankobjekte:
"Human_Resources.db_people_Datenfelder.Absenderinformationen.Unternehmen"
"Human_Resources.db_people_Datenfelder.Absenderinformationen.Region"
Die Durch folgende Datenbankobjekte ausgetauscht werden müssen:
"Applications_type.db_people_gbl_data_fields.Sender_Data.Company_Description"
"Applications_type.db_people_gbl_data_fields.Sender_Data.Region"
Ich habe eine Liste in der die Information gespeichert ist, welches Feld durch welches ausgetauscht werden muss, die in etwa so aussieht:
Human_Resources.db_people_Datenfelder.Absenderinformationen.Unternehmen|Applications_type.db_people_gbl_data_fields.Sender_Data.Company_Description
Wie kann ich das am sinnvollsten lösen? Kann mir da jemand vielleicht helfen?
Ich versuche mal mein Problem (möglichst verständlich) zu erklären:
HINTERGRUNDINFORMATION
Ich bin auf meiner Arbeit verantwortlich für die Administration sämtlicher Korrespondenzvorlagen. Diese Brief- und Vertragsvorlagen basieren aber nicht auf Word. Wir verwenden dafür ein Korrespondenz-tool namens Thunderhead, welches wie eine Art Content Management System funktioniert.
Die Vorlagen werden über das "Business Content Studio" erstellt. Diese Vorlagen bestehen jedoch nicht nur aus einfachem Text sondern auch aus Datenbankfeldern, sog. manuelle Felder (die bei der Brieferstellung über eine Eingabemaske befüllt werden) und diversen Regeln, die einzelne Textpassagen in Abhängigkeit von den Eingaben steuern.
Nun kam unsere IT auf die Idee Die Datenbanken nicht mehr getrennt für Deutschland und International zu verwalten, sondern nur noch eine globale Datenbank zu verwenden. Dies hat zur Folge, dass die Datenbankfelder nun andere Namen haben.
Für mein Team heißt das nun, dass wir in jedes Template hingehen und die alten Datenbankfelder(bzw. Platzhalter) gegen die nun neuen Felder austauschen müssen. Bei einem Scope von ca. 500 Vorlagen und durchschnittlich 20 Feldern pro Vorlage, wäre das einige Wochen arbeit.
Da die Templates aber auf dem Server in Form von XML-Dateien liegen, kam mir die Idee, dass wir nicht über das Tool arbeiten, sondern direkt in der Rohdatei (XML-Datei), über ein Suchen / Ersetzen Skript die entsprechenden Felder austauschen.
Die XML-Datei sieht in etwa so aus (Ausschnitt):
<?xml version="1.0" ?>
- <!-- generated by Thunderhead.Content, Version=3.0.12.0, Culture=neutral, PublicKeyToken=84c666f5e68a8973
-->
- <docdef version="3.0" bo-name="Human_Resources" bo-class="Th_180000251*_Human_Resources" styleset="190000626">
<script language="JavaScript" />
- <channel channel="2" template="190000624">
<sectionmap section="Letter Block" region="Letter Body" />
<sectionmap section="Page Number" region="Page Number" />
<sectionmap section="Letter Footer" region="Footer" />
<sectionmap section="DB Logo" region="Company Logo" />
<sectionmap section="Adressblock Customer" region="Address Customer" />
<sectionmap section="Adress DB" region="Address DB" />
- <setproperty name="display-width">
<string>210mm</string>
</setproperty>
</channel>
- <section id="2" name="Document" edit-groups="*">
- <section id="57" name="DB Logo">
- <fraglink id="73" resid="190000861">
- <argvalue name="Unternehmen">
<var name="Human_Resources.db_people_Datenfelder.Absenderinformationen.Unternehmen" type="string" />
</argvalue>
- <argvalue name="Region">
<var name="Human_Resources.db_people_Datenfelder.Absenderinformationen.Region" type="string" />
</argvalue>
</fraglink>
</section>
In diesem XML-Ausschnitt befinden sich zwei Datenbankobjekte:
"Human_Resources.db_people_Datenfelder.Absenderinformationen.Unternehmen"
"Human_Resources.db_people_Datenfelder.Absenderinformationen.Region"
Die Durch folgende Datenbankobjekte ausgetauscht werden müssen:
"Applications_type.db_people_gbl_data_fields.Sender_Data.Company_Description"
"Applications_type.db_people_gbl_data_fields.Sender_Data.Region"
Ich habe eine Liste in der die Information gespeichert ist, welches Feld durch welches ausgetauscht werden muss, die in etwa so aussieht:
Human_Resources.db_people_Datenfelder.Absenderinformationen.Unternehmen|Applications_type.db_people_gbl_data_fields.Sender_Data.Company_Description
Wie kann ich das am sinnvollsten lösen? Kann mir da jemand vielleicht helfen?