Suchen und Ersetzen, Kommentare und Leerzeilen behalten
Hallo zusammen,
für viele hier bestimmt ein leichtes Spiel:
Ich möchte in einer ini-Datei per Batch suchen und ersetzen.
Das funktioniert soweit auch, nur werden mir sämtliche Kommentare (angeführt mit Semikolon) und Leerzeilen aus der Quelldatei entfernt. Gibt es einen Weg, das zu unterbinden?
Mittels SuFu bin ich soweit gekommen:
Vielen Dank im Voraus!
für viele hier bestimmt ein leichtes Spiel:
Ich möchte in einer ini-Datei per Batch suchen und ersetzen.
Das funktioniert soweit auch, nur werden mir sämtliche Kommentare (angeführt mit Semikolon) und Leerzeilen aus der Quelldatei entfernt. Gibt es einen Weg, das zu unterbinden?
Mittels SuFu bin ich soweit gekommen:
@echo off & setlocal
Set Suchwort=123
Set Ersatz=456
Set Datei=C:\123.ini
If exist %temp%\new.txt del %temp%\new.txt
For /F "delims=" %%i in (%Datei%) do (
Echo %%i|Findstr /B "%Suchwort%" >nul
If Errorlevel 1 (
echo %%i>>%temp%\new.txt
) Else (
echo %Ersatz%>>%temp%\new.txt
))
move %temp%\new.txt %Datei%
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 240720
Url: https://administrator.de/forum/suchen-und-ersetzen-kommentare-und-leerzeilen-behalten-240720.html
Ausgedruckt am: 12.04.2025 um 13:04 Uhr
4 Kommentare
Neuester Kommentar
Hallo M3talH3ad und willkommen im Forum!
Versuch's mal so:
Grüße
bastla
Versuch's mal so:
@echo off & setlocal
set "Suchwort=123"
set "Ersatz=456"
set "Datei=C:\123.ini"
set "TempDat=%temp%\new.txt"
(for /f "delims=" %%i in ('findstr /n "^" "%Datei%"') do (
set "Zeile=%%i"
setlocal enabledelayedexpansion
echo(!Zeile:*:=!|findstr /b "%Suchwort%">nul && (
echo %Ersatz%
) || (
echo(!Zeile:*:=!
)
endlocal
))>%TempDat%
move %TempDat% "%Datei%"
bastla
Hallo M3talH3ad!
auch der ursprünglich vorhandene ":" eliminiert.
Zum besseren Verständnis (siehe auch
enthielte die Variable Zeile zunächst
Ein
würde dann "3:" entfernen, sodass wieder "Wert=5" ausgegeben würde. Der Sinn der ganzen Aktion ist dabei nur das gewünschte Erhalten der Leerzeilen, da die Nummerierung dafür sorgt, dass in der Schleife jede Zeile verarbeitet wird (es ist ja eine Leerzeile wegen der Nummer zunächst noch nicht "leer", sondern wird es erst wieder durch das Entfernen von Zeilnennummer und ":") ...
Grüße
bastla
Wofür ist das "^" in Zeile 7 gut
Das steht für "Zeilenanfang" - und den hat jede Zeile, womit sichergestellt ist, dass alle Zeilen verarbeitet werden.was bewirkt !Zeile:*:=! genau?
Die Ersetzung des Teils am Anfang der Variablen %Zeile% (bzw, wegen "delayedExpansion
", !Zeile!) bis zum ersten ":" (inklusive) durch Nichts - damit wird die Zeilennummer, die "findstr /n
" erstellt, abgeschnitten; sollte eine Zeile mit ":" beginnen, wird so nur der erste ":" (stammt von "findstr
") entfernt und nicht, wie bei der Alternativefor /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%Datei%"') do echo %%j
Zum besseren Verständnis (siehe auch
set /?
bei "Ersetzen von Umgebungsvariablen"): Wenn in der Datei in Zeile 3 stündeWert1=5
3:Wert1=5
echo %Zeile:*:=%
Grüße
bastla