Datum bzw. Textstellen in drei TXT-Datei ändern (automatisch oder manuell)
Hallo zusammen,
ich habe folgendes Problem:
ich muss/soll/will in drei TXT-Datei einen gewissen Wert (in dem Fall das Datum (JJJMMTT)) ändern:
Entweder, dass man das Datum beim Starten des Batches eingeben kann, oder dass das aktuelle Datum automatisch in die Datei geschrieben wird.
Die Datei sieht z. B. folgendermaßen aus:
.
.
.
rt60_asta*_1.*:rt60_asta_20080409_001.pdf
rt60_asta*_2.*:rt60_asta_20080409_002.pdf
rt60_asta*_3.*:rt60_asta_20080409_003.pdf
rt60_asta*_4.*:rt60_asta_20080409_004.pdf
.
.
.
Es werden die Positionen z. T. erweitert bzw. es kommen neue hinzu.
Meine letzten Batch-Programmierungen (simple) liegen schon einige Jahre zurück.
Hat mir jemand einen Tipp bzw. einen Ansatzpunkt?
Der Inhalt der Zeile darf nicht verändert werden (außer das Datum natürlich
)
da diese Datei für die Umbenennung mehrerer Dateien dient.
Vielen Dank schon mal im Voraus.
Gruß,
Tom
ich habe folgendes Problem:
ich muss/soll/will in drei TXT-Datei einen gewissen Wert (in dem Fall das Datum (JJJMMTT)) ändern:
Entweder, dass man das Datum beim Starten des Batches eingeben kann, oder dass das aktuelle Datum automatisch in die Datei geschrieben wird.
Die Datei sieht z. B. folgendermaßen aus:
.
.
.
rt60_asta*_1.*:rt60_asta_20080409_001.pdf
rt60_asta*_2.*:rt60_asta_20080409_002.pdf
rt60_asta*_3.*:rt60_asta_20080409_003.pdf
rt60_asta*_4.*:rt60_asta_20080409_004.pdf
.
.
.
Es werden die Positionen z. T. erweitert bzw. es kommen neue hinzu.
Meine letzten Batch-Programmierungen (simple) liegen schon einige Jahre zurück.
Hat mir jemand einen Tipp bzw. einen Ansatzpunkt?
Der Inhalt der Zeile darf nicht verändert werden (außer das Datum natürlich
da diese Datei für die Umbenennung mehrerer Dateien dient.
Vielen Dank schon mal im Voraus.
Gruß,
Tom
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 85458
Url: https://administrator.de/forum/datum-bzw-textstellen-in-drei-txt-datei-aendern-automatisch-oder-manuell-85458.html
Ausgedruckt am: 02.05.2025 um 10:05 Uhr
6 Kommentare
Neuester Kommentar
Hallo Busfahrer und willkommen im Forum!
Soferne die Ersetzung für jede Zeile erfolgen soll und die Struktur der einzelnen Zeilen (hinsichtlich des Trennzeichens "_" und der sich daraus ergebenden Position des Datums als 5. Bestandteil) immer gleich ist, etwa so:
Die Eingabe des Datums wird nicht weiter geprüft - nur, falls keine Eingabe erfolgte, wird das heutige Datum verwendet.
Die Originaldatei bleibt als Kopie namens "Dateiname.Typ.bak" erhalten.
Generell ist allerdings anzumerken, dass für Ersetzungen besser ein Tool wie etwa "sed" oder zumindest VBScript zu empfehlen wäre, da Batch für das Behandeln von einzelnen Zeichen/Teilstrings nur bedingt geeignet ist.
Grüße
bastla
Soferne die Ersetzung für jede Zeile erfolgen soll und die Struktur der einzelnen Zeilen (hinsichtlich des Trennzeichens "_" und der sich daraus ergebenden Position des Datums als 5. Bestandteil) immer gleich ist, etwa so:
@echo off & setlocal
set "Datei=D:\Textdatei.txt"
set "Bak=%Datei%.bak"
move "%Datei%" "%Bak%"
set /p "Datum=Bitte das Datum im Format JJJJMMTT eingeben: "
if defined Datum goto :DoIt
set "Datum=%date:~-4%%date:~-7,2%%date:~-10,2%
:DoIt
for /f "usebackq tokens=1-5* delims=_" %%a in ("%Bak%") do echo %%a_%%b_%%c_%%d_%Datum%_%%f>>"%Datei%"
Die Originaldatei bleibt als Kopie namens "Dateiname.Typ.bak" erhalten.
Generell ist allerdings anzumerken, dass für Ersetzungen besser ein Tool wie etwa "sed" oder zumindest VBScript zu empfehlen wäre, da Batch für das Behandeln von einzelnen Zeichen/Teilstrings nur bedingt geeignet ist.
Grüße
bastla
Hallo Busfahrer!
Für 3 Dateien brauchen wir noch ein Unterprogramm:
Zu "sed": Für eine Deiner Dateien ginge das etwa so:
Anmerkung: Die Anführungszeichen sind in diesem Beispiel alle überflüssig, aber schaden nicht, und sollten Leerzeichen in Pfad- oder Dateinamen ins Spiel kommen, brauchst Du sie tatsächlich.
"sed"-Info: Du könntest zB hier beginnen (und Dir vor allem auch die sedFAQ ansehen) ...
Grüße
bastla
Für 3 Dateien brauchen wir noch ein Unterprogramm:
@echo off & setlocal
set /p "Datum=Bitte das Datum im Format JJJJMMTT eingeben: "
if defined Datum goto :DoIt
set "Datum=%date:~-4%%date:~-7,2%%date:~-10,2%
:DoIt
for %%i in ("D:\Textdatei1.txt" "D:\Textdatei2.txt" "D:\Textdatei3.txt") do call :ProcessFile "%%~i"
goto :eof
:ProcessFile
set "Datei=%~1"
set "Bak=%Datei%.bak"
move "%Datei%" "%Bak%"
for /f "usebackq tokens=1-5* delims=_" %%a in ("%Bak%") do echo %%a_%%b_%%c_%%d_%Datum%_%%f>>"%Datei%"
goto :eof
move "D:\Textdatei1.txt" "D:\Textdatei1.txt.bak" & sed 's/20080409/20080414/g' "D:\Textdatei1.txt.bak">"D:\Textdatei1.txt"
"sed"-Info: Du könntest zB hier beginnen (und Dir vor allem auch die sedFAQ ansehen) ...
Grüße
bastla
Hallo Busfahrer!
Wenn es auch Datumseinträge an Position 7 (anstatt 5) gibt, verwenden wir eben verschiedene Unterprogramme:
Nach diesem Prinzip kannst Du auch andere Anordnungen berücksichtigen.
Als Alternative: Doch "sed" verwenden, etwa
Damit wird das Datum unabhängig von seiner Position in der Zeile ersetzt.
Grüße
bastal
Wenn es auch Datumseinträge an Position 7 (anstatt 5) gibt, verwenden wir eben verschiedene Unterprogramme:
@echo off & setlocal
set /p "Datum=Bitte das Datum im Format JJJJMMTT eingeben: "
if defined Datum goto :DoIt
set "Datum=%date:~-4%%date:~-7,2%%date:~-10,2%
:DoIt
for %%i in ("D:\Textdatei1.txt" "D:\Textdatei2.txt" "D:\Textdatei3.txt") do call :ProcessFile_5 "%%~i"
for %%i in ("D:\Textdatei4.txt") do call :ProcessFile_7 "%%~i"
goto :eof
:ProcessFile_5
set "Datei=%~1"
set "Bak=%Datei%.bak"
move "%Datei%" "%Bak%"
for /f "usebackq tokens=1-5* delims=_" %%a in ("%Bak%") do echo %%a_%%b_%%c_%%d_%Datum%_%%f>>"%Datei%"
goto :eof
:ProcessFile_7
set "Datei=%~1"
set "Bak=%Datei%.bak"
move "%Datei%" "%Bak%"
for /f "usebackq tokens=1-7* delims=_" %%a in ("%Bak%") do echo %%a_%%b_%%c_%%d_%%e_%%f_%Datum%_%%h>>"%Datei%"
goto :eof
Als Alternative: Doch "sed" verwenden, etwa
@echo off & setlocal
set /p "Datum=Bitte das Datum im Format JJJJMMTT eingeben: "
if defined Datum goto :DoIt
set "Datum=%date:~-4%%date:~-7,2%%date:~-10,2%
:DoIt
for %%i in ("D:\Textdatei1.txt" "D:\Textdatei2.txt" "D:\Textdatei3.txt" "D:\Textdatei4.txt") do call :ProcessFile "%%~i"
goto :eof
:ProcessFile
set "Datei=%~1"
set "Bak=%Datei%.bak"
move "%Datei%" "%Bak%"
"C:\Pfad zu sed\sed" 's/20080409/%Datum%/g' "%Bak%">"%Datei%"
goto :eof
Grüße
bastal