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-Key: 374126

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

Printed on: April 24, 2024 at 23:04 o'clock

Member: rubberman
Solution rubberman May 16, 2018 at 21:29:27 (UTC)
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
Member: Lochkartenstanzer
Lochkartenstanzer May 17, 2018 updated at 06:41:23 (UTC)
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
Member: rubberman
rubberman May 17, 2018 at 07:01:05 (UTC)
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
Member: Lochkartenstanzer
Lochkartenstanzer May 17, 2018 at 08:56:57 (UTC)
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
Member: m8ichael
m8ichael May 26, 2018 at 07:39:54 (UTC)
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