Batch Datei zum Suchen und Ersetzen in einer Textdatei die ein ! enthält
Hallo,
ist mal wieder eine Frage zu Suche und ersetzten. Einige Beispiele aus älteren Beiträgen funktionieren, nur das ! (Ausrufezeichen) verschwindet in der ausgegebenen Datei.
In der Datei Test.txt sind mehrere Zeilen , die so aussehen:
.
.
:Polizei=NOTRUF110,Region=1340,NR=22273,Breite=E341CC0!
:Polizei=NOTRUF110,Region=1540,NR=27873,Breite=E362CC0!
Mit der folgenden Batch funktioniert es, nur das ! (Ausrufezeichen) wird in der ausgegebenen Datei gelöscht.
Das ! (Ausrufezeichen) soll ausserdem noch in ein ; (Semikolon) ersetzt werden, wie geht das.
Das Ergebnis sollte so aussehen:
Waehle:Polizei=NOTRUF110,Region=1340,NR=22273,Breite=E341CC0;
Waehle:Polizei=NOTRUF110,Region=1540,NR=27873,Breite=E362CC0;
Danke für die Hilfe eines Anfängers
MfG
bodor
ist mal wieder eine Frage zu Suche und ersetzten. Einige Beispiele aus älteren Beiträgen funktionieren, nur das ! (Ausrufezeichen) verschwindet in der ausgegebenen Datei.
In der Datei Test.txt sind mehrere Zeilen , die so aussehen:
.
.
:Polizei=NOTRUF110,Region=1340,NR=22273,Breite=E341CC0!
:Polizei=NOTRUF110,Region=1540,NR=27873,Breite=E362CC0!
Mit der folgenden Batch funktioniert es, nur das ! (Ausrufezeichen) wird in der ausgegebenen Datei gelöscht.
Das ! (Ausrufezeichen) soll ausserdem noch in ein ; (Semikolon) ersetzt werden, wie geht das.
@echo off & setlocal enabledelayedexpansion
set "Datei=D:\Test.txt"
set "Von=:Polizei"
set "Nach=Waehle:Polizei"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%t%"
move /y "%t%" "%Datei%"
Das Ergebnis sollte so aussehen:
Waehle:Polizei=NOTRUF110,Region=1340,NR=22273,Breite=E341CC0;
Waehle:Polizei=NOTRUF110,Region=1540,NR=27873,Breite=E362CC0;
Danke für die Hilfe eines Anfängers
MfG
bodor
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 118497
Url: https://administrator.de/contentid/118497
Ausgedruckt am: 25.11.2024 um 02:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo Bodor, mach Dir nicht das Leben schwer mit Batch. Gehe auf http://www.inforapid.de/ , lade Dir "Suchen&Ersetzten runter, und los gehts.
Gruß
Stefan
Gruß
Stefan
Hallo bodor21 und willkommen im Forum!
Sollte so gehen:
Grüße
bastla
Sollte so gehen:
@echo off & setlocal
set "Datei=D:\Test.txt"
set "Von=:Polizei"
set "Nach=Waehle:Polizei"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & call :ProcessLine
move "%t%" "%Datei%"
goto :eof
:ProcessLine
call set "Line=%%Line:%Von%=%Nach%%%"
::Ersetzung "!" durch ";"
set "Line=%Line:!=;%"
>>"%t%" echo %Line%
goto :eof
bastla
Moin bodor21,
willkommen im Forum.
Wenn eine Lösung des eigentlichen Problems gefragt ist (Strings mit enthaltenenem "!" sind ein bisschen zickig in Verbindung mit DelayedExpansion), dann wäre die Antwort:
Grüße
Biber
willkommen im Forum.
Wenn eine Lösung des eigentlichen Problems gefragt ist (Strings mit enthaltenenem "!" sind ein bisschen zickig in Verbindung mit DelayedExpansion), dann wäre die Antwort:
- Benutze "DelayedExpansion" nur "local", da, wo es auch benötigt wird.
@echo off & setlocal disabledelayedexpansion
set "Datei=D:\Test.txt" set "Von=:Polizei"
set "Nach=Waehle:Polizei"
:: set "t=%temp%\text.tmp"
set "t=con:"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "line=%%i" & call :ProcessLine
goto :eof
:ProcessLine -- keine Parameter --
:: solange keine DelayedExpansion gesetzt: Ausrufezeichen ersetzen
Set "Line=%Line:!=;%"
setlocal Enabledelayedexpansion
set Line=!Line:%Von%=%Nach%!
echo %Line%>>"%t%"
echo [auf echo gesetzt] move /y "%t%" "%Datei%"
Endlocal
goto :eof
Grüße
Biber
Hallo bodor21!
Falls Du auch eine Anwort von mir akzeptierst, dann (ungetestet und unter der Voraussetzung, dass die Datensätze in jeder Zeile den gleichen Aufbau und Kommata als Trennzeichen haben):
Grüße
bastla
Falls Du auch eine Anwort von mir akzeptierst, dann (ungetestet und unter der Voraussetzung, dass die Datensätze in jeder Zeile den gleichen Aufbau und Kommata als Trennzeichen haben):
@echo off & setlocal
set "Datei=D:\Test.txt"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "usebackq tokens=1-3 delims=," %%i in ("%Datei%") do >>"%t%" echo %%i,%%j,%%k
move "%t%" "%Datei%"
bastla
Moin bodor21,
ich würde an Deiner Stelle die Strategie überdenken und nicht mehr zeilenweise denken sonder eher feldweise.
Es scheint ja nur eine endliche Anzahl von "Feldern" in einer Zeile vorkommen zu können, wenn wir als Feldtrenner ein "," annehmen.
[ja, dass die Zeile mit ":" beginnt und mit "!" endet, habe ich wahrgenommen].
Dennoch bleiben x "Felder" mit dem Muster "whatever=wert" zwischen den Trennern "," übrig.
Beispiel am CMD-Prompt:
Jedes dieser einzelnen "Felder" oder auf bätchisch "Token" %i, %j %k..... kannst Du wiederum in zwei Token "whatever" und "wert" zerlegen,
wenn Du in einer zweiten Runde als "Delims==" und "token=1,2" angibst.
Dann kannst Du auch prüfen, ob dieses whatever-token gleich "Breite" heißt und damit umgehen.
Grüße
Biber
[Edit] @bastla
[/Edit]
ich würde an Deiner Stelle die Strategie überdenken und nicht mehr zeilenweise denken sonder eher feldweise.
Es scheint ja nur eine endliche Anzahl von "Feldern" in einer Zeile vorkommen zu können, wenn wir als Feldtrenner ein "," annehmen.
[ja, dass die Zeile mit ":" beginnt und mit "!" endet, habe ich wahrgenommen].
Dennoch bleiben x "Felder" mit dem Muster "whatever=wert" zwischen den Trennern "," übrig.
Beispiel am CMD-Prompt:
>for /f "delims=, tokens=1-4" %i in (":Polizei=NOTRUF110,Region=1540,NR=27873,Breite=E362CC0!") do @echo 1[%i] 2[%j] 3[%k] 4[und nicht: %l]
1[:Polizei=NOTRUF110] 2[Region=1540] 3[NR=27873] 4[und nicht: Breite=E362CC0!]
Jedes dieser einzelnen "Felder" oder auf bätchisch "Token" %i, %j %k..... kannst Du wiederum in zwei Token "whatever" und "wert" zerlegen,
wenn Du in einer zweiten Runde als "Delims==" und "token=1,2" angibst.
Dann kannst Du auch prüfen, ob dieses whatever-token gleich "Breite" heißt und damit umgehen.
Grüße
Biber
[Edit] @bastla
wenn Du auch eine Antwort von mir akzeptierst..
Ich würde keine Antworten von Rechtsüberholern akzeptieren ... [/Edit]