alleedx

For f - In vielen Dateien Komma durch Punkt ersetzen

Hallo zusammen,
ich bräuchte ein wenig Hilfe bei der Erstellung einer Batch Datei. Sie soll in einem Ordner liegen und ausgeführt werden der mehrere Unterordner (Anzahl und Name variabel) enthält. In diesen Ordnern liegen jeweils mehrere Dateien mit der Endung *.dat (01.dat, 02.dat, 03. dat usw.). Sie lassen sich im normalen Editor öffnen und enthalten viele Zahlen mit Komma. In all diesen Zahlen in den Dateien soll das Komma durch einen Punkt ersetzt werden.
Bisher habe ich folgendes was auch recht gut funktioniert:

echo Komma wird durch Punkt ersetzt...
@echo off
ren *.dat *.bak

setlocal enabledelayedexpansion

if exist 01.bak goto ren01
if exist 02.bak goto ren02

:ren01
for /f "delims==" %%A in (01.bak) do set string=%%A & echo !string:,=.! >> 01.dat  
del 01.bak /q

:ren02
for /f "delims==" %%A in (02.bak) do set string=%%A & echo !string:,=.! >> 02.dat  
del 02.bak /q
exit

Dazu muss die Batch Datei jedoch jeweils erst in den jeweiligen Ordner geschoben werden und ich muss jeden Dateinamen vorher angeben. Außerdem muss dabei von der Batch Datei immer erst eine Backup der original Datei erstellt und wieder gelöscht werden. Das geht sicher noch eleganter, allerdings kann ich mich einfach nicht mit dem Befehl "For /F" anfreunden, irgendwie verstehe ich gar nicht wie ich diesen richtig in Kombination mit Variablen verwenden kann. Kann mir da jemand behilflich sein?

Über Hilfe würde ich mich sehr freuen. Vielen Dank schon mal!
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 312869

Url: https://administrator.de/forum/for-f-in-vielen-dateien-komma-durch-punkt-ersetzen-312869.html

Ausgedruckt am: 29.04.2025 um 22:04 Uhr

129813
Lösung 129813 18.08.2016 aktualisiert um 10:28:13 Uhr
Goto Top
Hi
@echo off & setlocal enabledelayedexpansion
::folder where to process dat files (recursive search)
set "folder=C:\yourfolder"  
:: process all dat files in folder ans subfolders
for /f "delims=" %%a in ('dir /b /s /a-d "%folder%\*.dat"') DO (  
    ren "%%a" "%%~na.bak"  
    >"%%a" (for /f "tokens=1,2* delims=:" %%b in ('findstr /n "^" "%%~dpna.bak"') DO (  
        set "string=%%c"  
	if "!string!" == "" (echo.) else (set "string=!string:,=.!" &echo !string!)  
    ))
   del "%%~dpna.bak"  
)
Regards
alleedx
alleedx 18.08.2016 um 11:15:37 Uhr
Goto Top
Thank you very much highload, this worked really great!