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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 309098
Url: https://administrator.de/contentid/309098
Ausgedruckt am: 25.11.2024 um 18:11 Uhr
9 Kommentare
Neuester Kommentar
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:
Du musst nur im oberen Teil die Pfade anpassen, sowie was (suchen_nach) durch was (ersetzen_durch) ersetzt werden soll.
Edit: Punkt und Komma im Code vertauscht
Gruß,
narthan
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.
Edit: Punkt und Komma im Code vertauscht
Gruß,
narthan
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:
Gruß, narthan
PS: falls es klappt, bitte so nett sein und die Frage schließen und Kommentar als Lösung markieren
@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
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:
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
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
A little bit of powershell and this could be done as a one liner in your batch file:
Regards
@echo off & setlocal
set "sourcefolder=C:\Data"
powershell -Executionpolicy Bypass -Command "gci '%sourcefolder%' -Filter *.txt | %%{(gc $_.Fullname) -replace '\.',',' | set-content $_.Fullname}"