m8ichael
Goto Top

Suchen und Ersetzen per Batch

Hallo zusammen,

ich suche eine Lösung, um innerhalb einer Textdatei einen Wert zu suchen und anschließend zu ersetzen. Ich bin dabei auf diese Frage gestoßen:

Alte Frage

@echo off & setlocal enabledelayedexpansion
set "Datei=Test.txt"   
set "t=Temp.tmp"   

set "Suchen1=aaa"  
set "Ersetzen1=bbb"  
set "Suchen2=ccc"  
set "Ersetzen2=ddd"  

if exist "%t%" del "%t%"  
for /f "delims=" %%i in ('findstr /n $ "%Datei%"') do set "Line=%%i" & call :ProcessLine  
move "%t%" "%Datei%"  
goto :WEITER_IM_BATCH

:ProcessLine
for /f "tokens=1* delims=:" %%a in ("%Line%") do set "L=%%b"  
if not defined L >>"%t%" echo\& goto :eof  
set WriteLine1=!L:%Suchen1%=%Ersetzen1%!
set WriteLine2=!WriteLine1:%Suchen2%=%Ersetzen2%!
>>"%t%" echo !WriteLine2!  
goto :eof

:WEITER_IM_BATCH
.......

Das ganze funktioniert allerdings nur, solange im Such-/Ersetzungstext kein "=" enthalten ist. Ich würde daher oben schon einmal die Suchausdrücke in

set "Suchen1=aaa^^=xyz"  
set "Ersetzen1=bbb^^=zyx"  
...

ändern, aber das klappt trotzdem noch nicht ganz... face-sad

Wie müsste man den Beispielcode abändern? Ich stehe gerade bzgl. des Escapens etwas auf dem Schlauch...

Viele Grüße

Michael

Content-ID: 374126

Url: https://administrator.de/contentid/374126

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

rubberman
Lösung rubberman 16.05.2018 um 23:29:27 Uhr
Goto Top
Wenn immer du Textersetzungen mit Batch vornehmen willst, du das aber einigermaßen idiotensicher tun willst/musst, dann mach es nicht mit Batch face-wink Auch andere Sprachen, wie Powershell, bieten dir ein Kommandozeileninterface und lassen sich in Batchscripts einbinden. Ebenfalls möglich sind andere Windows Scripts, wie JScript, verwurstet in diesem Tool:
JREPL.BAT

Steffen
Lochkartenstanzer
Lochkartenstanzer 17.05.2018 aktualisiert um 08:41:23 Uhr
Goto Top
Zitat von @rubberman:

Wenn immer du Textersetzungen mit Batch vornehmen willst, du das aber einigermaßen idiotensicher tun willst/musst, dann mach es nicht mit Batch face-wink Auch andere Sprachen, wie Powershell, bieten dir ein Kommandozeileninterface und lassen sich in Batchscripts einbinden. Ebenfalls möglich sind andere Windows Scripts, wie JScript, verwurstet in diesem Tool:
JREPL.BAT


Oder einfach das richtige Werkzeug dafür nehmen, wie z.B. sed.

lks
rubberman
rubberman 17.05.2018 um 09:01:05 Uhr
Goto Top
Natürlich. Abhängig von der Umgebung (3rd party erlaubt/erwünscht, soll on-the-fly auch auf anderen Rechnern laufen etc.).

Steffen
Lochkartenstanzer
Lochkartenstanzer 17.05.2018 um 10:56:57 Uhr
Goto Top
Zitat von @rubberman:

Natürlich. Abhängig von der Umgebung (3rd party erlaubt/erwünscht, soll on-the-fly auch auf anderen Rechnern laufen etc.).

Das sind Randbedingungen, die man nennen sollte, um zu dem richtigen Lösungsweg zu gelangen.

lks
m8ichael
m8ichael 26.05.2018 um 09:39:54 Uhr
Goto Top
So, habe das jetzt mit einem Powershell-Befehl gelöst:

Powershell -Command "(Get-Content %datei%).replace('Wert=Alt', 'Wert=neu') | Set-Content %datei%"  

Viele Grüße

Michael