Batch: CRLF nach Suchen und Ersetzen in Datei
Habe öfters ein Text File in dem ich bestimmte strings ersetzen muss und dazu dieses Batch gefunden:
Der zu ersetzende Text ist eindeutig und das Batch funktioniert auch.
Aber:
es fügt an das Ende jeder Zeile CRLF (Hex 20 20 0D 0A) hinzu, was kontraproduktiv ist.
Wie kann ich das vermeiden
Danke für alle Antworten
@echo on & setlocal enabledelayedexpansion
set "Datei=c:\noname.sx"
set "Datei2=c:\noname.s19"
set "Von=S725"
set "Nach=S325"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Line=%%i" & set Line=!Line:%Von%=%Nach%! & echo !Line!>>"%t%"
move /y "%t%" "%Datei2%"
Der zu ersetzende Text ist eindeutig und das Batch funktioniert auch.
Aber:
es fügt an das Ende jeder Zeile CRLF (Hex 20 20 0D 0A) hinzu, was kontraproduktiv ist.
Wie kann ich das vermeiden
Danke für alle Antworten
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 671887
Url: https://administrator.de/forum/batch-crlf-nach-suchen-und-ersetzen-in-datei-671887.html
Ausgedruckt am: 15.04.2025 um 23:04 Uhr
15 Kommentare
Neuester Kommentar
https://stackoverflow.com/questions/7105433/windows-batch-echo-without-n ...
echo|set /p="Dein String ohne abschließenden Zeilenumbruch"
echo|set /p="Dein String ohne abschließenden Zeilenumbruch"
Zitat von @ppm007:
Wie kann ich das vermeiden
Nutze PowerShell mit einer passenden
(Get-Content -Path <file>).Replace (<von>, <nach>) | Set-Content <file>
funktioniert leider nicht
doch, so machen ...@echo off & setlocal enabledelayedexpansion
set "Datei=c:\noname.sx"
set "Datei2=c:\noname.s19"
set "Von=S725"
set "Nach=S325"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
>"%t%" (for /f "usebackq delims=" %%i in ("%Datei%") do (
set "Line=%%i"
echo|set /p="!Line:%Von%=%Nach%!"
))
move /y "%t%" "%Datei2%"
Aber eher besser gleich die Powershell nehmen ...
[IO.File]::WriteAllText("C:\noname.s19",(Get-Content "C:\noname.sx" -raw).replace('S725','S325'))
Wolltest du doch so, du wolltest die Zeilenenden entfernen... wie bitte willst du mehrere Zeilen voneinander "ohne" CRLF / LF trennen????, Zeilen werden Standardmäßig damit getrennt, ganz ohne geht es nicht, nur wenn es nur eine einzige Zeile ist dann schon ...
??
Ich sag nur Datei-Encoding, da bekommst du mit Batch wirklich Spaß ...
mit Powershell habe ich keinen Verwandten
Ich sag nur Datei-Encoding, da bekommst du mit Batch wirklich Spaß ...
und die Zeilen sind im Editor untereinander,
Dafür muss da aber mindestens ein LF (0x0A) (nach Linux Gusto) drin stehen,....https://de.m.wikipedia.org/wiki/Zeilenumbruch
p.s. PS funktioniert auch simpel in Batch verwurstet 😋
@echo off
powershell -EP Bypass -C "[IO.File]::WriteAllText('C:\noname.s19',(Get-Content 'C:\noname.sx' -raw).replace('S725','S325'))"
Also ein normaler Windows Zeilenumbruch, ergo brauchst du keinerlei Verrenkungen ...
Ansonsten hat deine Datei evt. ein Encoding das du erst ermitteln und dann mit chcp umstellen musst.
@echo off & setlocal enabledelayedexpansion
set "Datei=c:\noname.sx"
set "Datei2=c:\noname.s19"
set "Von=S725"
set "Nach=S325"
set "t=%temp%\text.tmp"
if exist "%t%" del "%t%"
>"%t%" (for /f "delims=" %%i in ('type "%Datei%"') do (
set "Line=%%i"
echo.!Line:%Von%=%Nach%!
))
move /y "%t%" "%Datei2%"
sed ist doch aus der Linux Welt, der Aufwand wäre zu hoch
Ach watt ... das läuft problemlos auch unter Windows ...https://gnuwin32.sourceforge.net/packages/sed.htm?? Die drei 0x20 sind halt nur drei zusätzliche Leerzeichen vor dem Zeilenumbruch. Was willst du eigentlich von uns? Wenn du die brauchst schreib sie halt mit ins echo ...