heimwerker
Goto Top

Dateiinhalte in Textdateien tauschen

Hallo Forum

Ich habe ein Problem bei der Bearbetung von gleichartigen Textdateien.
Das folgende Programm funktioniert, leider nur mit einer einzigen Textdatei:

@echo off & setlocal enabledelayedexpansion
mode 90,60

:Start
cls
echo.
set /P Quelldatei= Dateiname der Quelldatei inkl. Endung:
prompt
if not exist %Quelldatei% @echo Die Quelldatei ist im Programmordner nicht vorhanden. & pause & goto :Start
echo.
set /P Zieldatei= Dateiname der Zieldatei inkl. Endung:
prompt
echo.
set /P SucheNach= Gesuchte Zeichenfolge:
prompt
echo.
set /P ErsetzeDurch= Zeichenfolge ersetzen durch:
prompt
echo.
echo.
for /f "delims=" %%i in ('findstr . "%Quelldatei%"') do (set Zeile=%%i & call :ersetzen !Zeile!)
goto :Ende

:ersetzen
set Zeile=!Zeile:%SucheNach%=%ErsetzeDurch%!
if [!Zeile!] equ (echo.>>%Zieldatei%) else (echo !Zeile!>>%Zieldatei%)
goto :eof

:Ende
del %Quelldatei%
ren %Zieldatei% %Quelldatei%
echo.
@echo Datei ist korrigiert.
pause
exit

Nun habe ich aber in einem ganzen Stapel von .asc's oder .csv's Änderungen vorzunehmen.
Gezielt suche ich z. B. nach "," und will es mit " " ersetzen.
Es müßte also jede *.asc abgearbeitet, der Originalname am Dateiende wieder hergestellt und die nächste .asc eingelesen werden.

Wer kann mir helfen, meine Denkblockade zu beseitigen?

Gruß und danke vorerst.

Content-Key: 159745

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

Printed on: April 20, 2024 at 02:04 o'clock

Member: bastla
bastla Jan 30, 2011 at 17:47:52 (UTC)
Goto Top
Hallo heimwerker und willkommen im Forum!

Unter der Annahme, dass die Ersetzung mit Deinem (übrigens nicht als formatierten) Batch tatsächlich funktioniert, könnte die Verarbeitung aller Dateien eines anzugebenden Typs (ungetestet )etwa so erfolgen:
@echo off & setlocal enabledelayedexpansion
mode 90,60

set /P QuelldateiTyp= Dateityp der Quelldatei (zB asc): 
prompt
if not exist *.%QuelldateiTyp% echo Keine Quelldateien vorhanden. & pause & goto :eof
set /P SucheNach= Gesuchte Zeichenfolge:
prompt
echo.
set /P ErsetzeDurch= Zeichenfolge ersetzen durch:
prompt
echo.
echo.

set "Zieldatei=%temp%\MitErsetzung.tmp"  
for /f "delims=" %%a in ('dir /b /a-d *.%QuelldateiTyp%') do call :ProcessFile "%%a"  
echo Alle Ersetzungen vorgenommen
pause
goto :eof

:ProcessFile
for /f "delims=" %%i in ('findstr . %1) do (set Zeile=%%i & call :ersetzen !Zeile!)  
move %Zieldatei% %1
goto :eof

:ersetzen
set Zeile=!Zeile:%SucheNach%=%ErsetzeDurch%!
if [!Zeile!] equ  (echo.>>%Zieldatei%) else (echo !Zeile!>>%Zieldatei%)
goto :eof
Nur interessehalber: Wozu sollen eigentlich die Zeilen mit "prompt" gut sein?

Grüße
bastla
Member: heimwerker
heimwerker Jan 30, 2011 at 18:36:49 (UTC)
Goto Top
Danke für die nette Begrüßung, die schnelle Antwort und was soll ich dazu noch sagen, außer:
Den Seinen gibt's der Herr im Schlafe...

In der Zeile 20 mußte ich nur noch hinter %1 ein einfaches ' setzen und schon lief das Programm astrein durch.

Die prompt waren als Eingabeaufforderung gedacht, sind schon entfernt.

Ich bedanke mich nochmals für Deine Hilfe
Gruß
heimwerker