Batch-Skript IF-Anweisung mit Klammer in Variable funktioniert nicht
Hallo,
folgendes Problem: Ich möchte ein Batch-Skript erstellen, welches innerhalb einer Textdatei eine bestimmte Zeile durch eine andere ersetzt. Dazu wird die Textdatei Zeile für Zeile mit einer for-Schleife ausgelesen und alle Zeilen, die nicht der gesuchten Zeile entsprechen werden direkt in ein neues Textdokument geschrieben. Wenn das Skript auf die gesuchte Zeile trifft, wird hingegen eine andere Zeile in die neue Textdatei geschrieben.
Hier erstmal der Code-Schnipsel:
Wenn ich die Batchdatei so ausführe, fehlt allerdings die geänderte Zeile komplett in der neuen Textdatei. Das Problem hängt mit den Klammern in dem neuen Text zusammen (Variable "Text"). Wenn ich die schließende Klammer hinter der 3 weglasse (also "BeispielText(123abc") klappt nämlich alles. Außerdem klappt auch alles einwandfrei, wenn ich in dem IF-Befehl die neue Zeile hart eintrage und vor die Klammer ein ^ hinzufüge (also "echo BeispielText(123^)abc>>C:\NeueDatei.txt").
Nun meine Frage, wie bekomme ich es hin, dass ich die Klammer und die Variable verwenden kann?
folgendes Problem: Ich möchte ein Batch-Skript erstellen, welches innerhalb einer Textdatei eine bestimmte Zeile durch eine andere ersetzt. Dazu wird die Textdatei Zeile für Zeile mit einer for-Schleife ausgelesen und alle Zeilen, die nicht der gesuchten Zeile entsprechen werden direkt in ein neues Textdokument geschrieben. Wenn das Skript auf die gesuchte Zeile trifft, wird hingegen eine andere Zeile in die neue Textdatei geschrieben.
Hier erstmal der Code-Schnipsel:
@echo off & setlocal
set Text=BeispielText(123)abc
Type Nul >C:\NeueDatei.txt
for /f "tokens=1* delims=:" %%A in ('findstr /N "^" "C:\AlteDatei.txt"') do if %%A==3 (echo %Text%>>C:\NeueDatei.txt) else (echo/%%B>>C:\NeueDatei.txt)
Wenn ich die Batchdatei so ausführe, fehlt allerdings die geänderte Zeile komplett in der neuen Textdatei. Das Problem hängt mit den Klammern in dem neuen Text zusammen (Variable "Text"). Wenn ich die schließende Klammer hinter der 3 weglasse (also "BeispielText(123abc") klappt nämlich alles. Außerdem klappt auch alles einwandfrei, wenn ich in dem IF-Befehl die neue Zeile hart eintrage und vor die Klammer ein ^ hinzufüge (also "echo BeispielText(123^)abc>>C:\NeueDatei.txt").
Nun meine Frage, wie bekomme ich es hin, dass ich die Klammer und die Variable verwenden kann?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 191740
Url: https://administrator.de/contentid/191740
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
3 Kommentare
Neuester Kommentar
moin PSaR04,
erstmal danke für die sehr ausfühliche Beschreibung.
Die schliesende Klammer in der Variable wird nicht Maskiert und daher wird sie so behandelt, als wäre sie die Schliesende Klammer der if Anweisung.
Du kannst die Maskierung schon zur Aufnahme in die Variable benutzen.
Die Variable lässt sich auch richtig mit delayedexpansion benutzen.
Gruß Phil
erstmal danke für die sehr ausfühliche Beschreibung.
Die schliesende Klammer in der Variable wird nicht Maskiert und daher wird sie so behandelt, als wäre sie die Schliesende Klammer der if Anweisung.
Du kannst die Maskierung schon zur Aufnahme in die Variable benutzen.
set "text=Beispiel^(123^&weiteres^|^)"
@echo off
setlocal disabledelayedexpansion
set "Text=Beispie mit (klammer1234)text"
findstr /n "^" "C:\altedatei.txt" >"%temp%\%~n0tmp.txt"
3>"D:\neue Datei" (
for /f usebackqdelims^= %%i in ("%temp%\%~n0tmp.txt" ) do (
set "Line=%%i"
setlocal enabledelayedexpansion
for /f "delims=:" %%h in ("%%i") do if %%h equ 3 (>&3 echo(!Text!) else >&3 echo(!Line:*:=!
endlocal
))
del "%temp%\%~n0tmp.txt"
Gruß Phil