akira01
Goto Top

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


@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^^

Content-ID: 208024

Url: https://administrator.de/forum/suchen-und-ersetzen-text-mit-sonderzeichen-in-batch-datei-208024.html

Ausgedruckt am: 23.12.2024 um 16:12 Uhr

LordXearo
LordXearo 14.06.2013 aktualisiert um 11:51:36 Uhr
Goto Top
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
colinardo
colinardo 14.06.2013 um 12:41:34 Uhr
Goto Top
dann mach das alternativ so in Zeile 28 deines Scripts:
if "!zeile!" == "!suchen_nach1!" (set zeile=!ersetzen_durch1!)  

Grüße Uwe
pieh-ejdsch
pieh-ejdsch 14.06.2013 aktualisiert um 14:50:20 Uhr
Goto Top
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:
:@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
))
Gruß Phil