tingeltangelbatch
Goto Top

Punkt durch Komma ersetzen

Hallo,

für eine batch Datei suche ich folgende Hilfe / Code:

Ich habe monatlich ca. 10 Textdatein welche Werte mit einem "Punkt" enthalten.
Der "Punkt" soll durch "Komma" ersetzt werden.

Allerdings bekomme ich den Code nicht hin dass er funktioniert.

Aktuell gehe ich über Suchen und Ersetzen das ganze 10 mal halt.

Würde das ganze gerne mit einer batch Datei vereinfachen.

Content-ID: 309098

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

Ausgedruckt am: 25.11.2024 um 18:11 Uhr

narthan
narthan 06.07.2016 aktualisiert um 15:25:22 Uhr
Goto Top
Hallo TingelTangelbatch,

ich hatte ebenfalls ein Problem mit automatisch erzeugten Dateien, in denen quartalsweise etwas ersetzt werden muss und verwende folgenden Code in meinem Script:

@ECHO off
SETLOCAL enabledelayedexpansion


SET "quell_datei=C:\..."  
SET "ziel_datei=C:\...."  
SET "suchen_nach=."  
SET "ersetzen_durch=,"  

IF NOT DEFINED suchen_nach (ECHO Fehler: Die Variable suchen_nach ist nicht definiert^^!&GOTO :eof)
IF EXIST %ziel_datei% (DEL /f %ziel_datei% 1>NUL 2>NUL)

FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO (  
SET zeile=%%i& CALL :ersetzen !zeile!
)
GOTO :weiter
:ersetzen
SET zeile=!zeile:%suchen_nach%=%ersetzen_durch%!

IF [!zeile!] EQU  (ECHO.>>%ziel_datei%) ELSE (ECHO !zeile!>>%ziel_datei%)
GOTO :eof

:weiter
REM weitere Verarbeitung
ECHO Fertig^^!

Du musst nur im oberen Teil die Pfade anpassen, sowie was (suchen_nach) durch was (ersetzen_durch) ersetzt werden soll. face-smile

Edit: Punkt und Komma im Code vertauscht

Gruß,
narthan
TingelTangelbatch
TingelTangelbatch 06.07.2016 um 14:37:50 Uhr
Goto Top
Hallo Narthan,

vielen Dank schonmal. Muss in Zeile 13. auch was geändert werden?

Aktuell geht das Script bei mir noch nicht.

Gruß
narthan
narthan 06.07.2016 um 14:42:28 Uhr
Goto Top
Nein, die Schleife in Zeile 13 arbeitet mit der Variablen, die du im oberen Teil definierst.
Führ das Script doch bitte mal in der Konsole aus und poste die Fehlermeldung.

Gruß,
narthan
TingelTangelbatch
TingelTangelbatch 06.07.2016 um 14:50:56 Uhr
Goto Top
Die Zieldatei wird zwar erstellt, ist aber bis auf

!zeile!


leer.
narthan
narthan 06.07.2016 um 14:59:48 Uhr
Goto Top
Hmm, hast du darauf geachtet die verzögerte Erweiterung von Umgebungsvariablen zu aktivieren? Mit...

SETLOCAL enabledelayedexpansion 

Ansonsten müsste es mit obenstehendem Code funktionieren, habe es gerade nochmal getestet.

Gruß,
narthan
narthan
narthan 06.07.2016 um 15:41:22 Uhr
Goto Top
Falls du immer noch einen Fehler bekommst, probier es mal mit diesem Code...im Prinzip ist er identisch mit dem oberen Code, allerdings etwas verfeinert. Auch hier gilt, du musst nur die Pfade anpassen, und was du durch was ersetzen möchtest:


@ECHO off 
SETLOCAL
SET "quell_datei=C:\temp\abc.txt"  
SET "ziel_datei=C:\temp\abcneu.txt"  
SET "suchen_nach=."  
SET "ersetzen_durch=,"  

IF NOT DEFINED suchen_nach (ECHO Fehler: Die Variable suchen_nach nicht definiert^^!&GOTO :eof)
	IF EXIST %ziel_datei% (DEL /f %ziel_datei% 1>NUL 2>NUL)
    FOR /f "delims=" %%i IN ('FINDSTR . "%quell_datei%"') DO (  
        SET "zeile=%%i" & CALL :ersetzen  
    )
GOTO :weiter
:ersetzen
SETLOCAL enabledelayedexpansion
SET "zeile=!zeile:%suchen_nach%=%ersetzen_durch%!"  
>>"%ziel_datei%" ECHO(!zeile!  
ENDLOCAL
GOTO :eof

:weiter
REM weitere Verarbeitung
ECHO Fertig^^!

Gruß, narthan

PS: falls es klappt, bitte so nett sein und die Frage schließen und Kommentar als Lösung markieren face-smile
TingelTangelbatch
TingelTangelbatch 07.07.2016 um 08:19:17 Uhr
Goto Top
Nochmal vielen Dank für den Vorschlag. Leider gleiches Ergebnis. Die Datei wird erstellt aber nur mit

!ganze_zeile!
!zeile!
!zeile!

gefüllt. Die eigentlichen Informationen sind weg aus der neuen Datei.

Habe auch mal eine Datei selbst erstellt mit "Punkt" allerdings mit dem gleichen Ergebnis.
narthan
narthan 07.07.2016 um 10:37:07 Uhr
Goto Top
Moin,

tut mir leid, aber so ganz kann ich dein fehlerhaftes Ergebnis nicht nachvollziehen. Wenn ich meinen Code über den Quelltext kopiere und als bat speicher, die Pfade ändere und ausführe, funktioniert es einwandfrei auf meiner Seite...Nichts desto trotz hier ein letzter Lösungsvorschlag von meiner Seite:

@ECHO off
SETLOCAL
SET "quell_verzeichnis=C:\temp\ordner abc"  
SET "suchen_nach=."  
SET "ersetzen_durch=,"  
SET "Zusatz=_neu"  

IF NOT DEFINED suchen_nach (ECHO Fehler: Die Variable suchen_nach nicht definiert^^!&GOTO :eof)

FOR /f %%a IN ('DIR /b "%quell_verzeichnis%\*.txt"') do (  
	del /f "%%~na_neu%%~xa"  
    SET "ziel_datei=%%~na%Zusatz%%%~xa"  
	FOR /f "delims=" %%i IN ('FINDSTR /i . "%quell_verzeichnis%\%%a"') DO (  
        SET "zeile=%%i" & CALL :ERSETZEN  
    )
)
GOTO :WEITER

:ERSETZEN
SETLOCAL EnableDelayedExpansion
SET "zeile=!zeile:%suchen_nach%=%ersetzen_durch%!"  
>>"%quell_verzeichnis%\%ziel_datei%" ECHO(!zeile!  
ENDLOCAL
GOTO :EOF

:WEITER
ECHO Fertig^^!

Wichtig bei der Ordnerangabe: Entweder im Pfad den letzten Backslash weglassen oder aber im Code in den Zeilen 13 und 22 entsprechend anpassen.
(Neu: Angabe von Ordnernpfaden statt einzelnen TXT Dateien. In allen TXT Dateien in dem Ordner werden die Punkte durch Kommas ersetzt)

Schönen Gruß,
narthan
129813
129813 08.07.2016 aktualisiert um 12:26:54 Uhr
Goto Top
A little bit of powershell and this could be done as a one liner in your batch file:
@echo off & setlocal
set "sourcefolder=C:\Data"  
powershell -Executionpolicy Bypass -Command "gci '%sourcefolder%' -Filter *.txt | %%{(gc $_.Fullname) -replace '\.',',' | set-content $_.Fullname}"  
Regards