alleedx
Goto Top

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!

Content-Key: 312869

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

Printed on: April 18, 2024 at 22:04 o'clock

Mitglied: 129813
Solution 129813 Aug 18, 2016 updated at 08:28:13 (UTC)
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
Member: alleedx
alleedx Aug 18, 2016 at 09:15:37 (UTC)
Goto Top
Thank you very much highload, this worked really great!