Suchen und Ersetzen Text mit Sonderzeichen in Batch Datei
Hi Leute,
also ich habe ein Problem beim Suchen und Ersetzen einer Zeile und komme da nicht so recht weiter.
Ich habe folgende Batch Datei, die mir nach einem Text suche un diesen dann ersetzt. Funktioniert wunderbar mit allem ausser wenn ein "=" Zeichen im Text ist:
Also in der source.ini steht folgendes:
Dies ist der Anfang
Language=EN
Dies ist das Ende
Als Ergebnis in replace.ini kommt raus:
Dies ist der Anfang
EN=Language=DE=EN
Dies ist das Ende
Kann da jemand weiterhelfen?
Gruss Martin
also ich habe ein Problem beim Suchen und Ersetzen einer Zeile und komme da nicht so recht weiter.
Ich habe folgende Batch Datei, die mir nach einem Text suche un diesen dann ersetzt. Funktioniert wunderbar mit allem ausser wenn ein "=" Zeichen im Text ist:
Also in der source.ini steht folgendes:
Dies ist der Anfang
Language=EN
Dies ist das Ende
Als Ergebnis in replace.ini kommt raus:
Dies ist der Anfang
EN=Language=DE=EN
Dies ist das Ende
Kann da jemand weiterhelfen?
Gruss Martin
@ECHO off
SETLOCAL enabledelayedexpansion
REM
REM Suchen und Ersetzen in einer Textdatei
REM
SET "quell_datei=C:\Temp\replace\source.ini"
SET "ziel_datei=C:\Temp\replace\replace.ini"
SET "suchen_nach1=Language^=EN"
SET "ersetzen_durch1=Language1^=DE"
REM Loeschen der Ausgabedatei, falls sie (noch) existiert
IF EXIST %ziel_datei% (DEL /f %ziel_datei% 1>NUL 2>NUL)
REM Quell-Datei zeilenweise auslesen
REM und in Variable "zeile" schreiben
FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO (
SET zeile=%%i& CALL :ersetzen !zeile!
)
GOTO :weiter
:ersetzen
REM innerhalb der Variable "zeile"
REM den Inhalt der Variable "suchen_nach1" suchen
REM und diese durch den Inhalt der Variable "ersetzen_durch" ersetzen
SET zeile=!zeile:%suchen_nach1%=%ersetzen_durch1%!
REM Inhalt der Variable "zeile" in die Ausgabedatei schreiben
IF [!zeile!] EQU (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%)
GOTO :eof
:weiter
REM weitere Verarbeitung
ECHO Fertig^^
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 208024
Url: https://administrator.de/contentid/208024
Ausgedruckt am: 23.11.2024 um 01:11 Uhr
3 Kommentare
Neuester Kommentar
Hey,
das ist jetzt leider keine direkte antwort zu Deinem Problem, aber ich würde gerne mal auf PowerShell verweisen. Mit Powershell lässt sich vieles komfortabler und schneller umsetzen.
Get-Content "C:\Temp\replace\source.ini" | Foreach-Object {$_.Replace("EN","DE")} | Set-Content "C:\Temp\replace\replace.ini"
Viele Grüße
Xearo
das ist jetzt leider keine direkte antwort zu Deinem Problem, aber ich würde gerne mal auf PowerShell verweisen. Mit Powershell lässt sich vieles komfortabler und schneller umsetzen.
Get-Content "C:\Temp\replace\source.ini" | Foreach-Object {$_.Replace("EN","DE")} | Set-Content "C:\Temp\replace\replace.ini"
Viele Grüße
Xearo
moin akira01,
da die For-Schleife nur Zeilen mit Inhalt ausgibt ist es nicht erforderlich nach Leeren Variablen zu forschen und diese als nur Zeilenumbruch auszugeben.
Eine Ersetzung mit Leerzeilen erfolg hingegen so:
Eine Beschreibung für das Erweitern von UmgebungsVariablen mit Ersetzen.
Wenn DE nur einmal in der ini vorhanden ist könnte der Stern '*' anstatt 'Language=' zum Ersetzen Verwendet werden
Gruß Phil
da die For-Schleife nur Zeilen mit Inhalt ausgibt ist es nicht erforderlich nach Leeren Variablen zu forschen und diese als nur Zeilenumbruch auszugeben.
Eine Ersetzung mit Leerzeilen erfolg hingegen so:
:@echo off
setlocal disabledelayedexpansion
3>"C:\Temp\replace\replace.ini" (
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "C:\Temp\replace\source.ini" ') do if %%j equ Language^=EN (>&3 echo Language1=DE) else >&3 echo %%j
)
Eine Beschreibung für das Erweitern von UmgebungsVariablen mit Ersetzen.
Wenn DE nur einmal in der ini vorhanden ist könnte der Stern '*' anstatt 'Language=' zum Ersetzen Verwendet werden
:@echo off
setlocal disabledelayedexpansion
3>"C:\Temp\replace\replace.ini" (
for /f "tokens=*delims=" %%i in ('findstr /n "^" "C:\Temp\replace\source.ini" ') do (set "zeile=%%i"
setlocal enabledelayedexpansion
set "zeile=!zeile:*DE=.:Language=EN!"
echo(!zeile:*:=!
endlocal
))