Datei auslesen und in andere Datei schreiben und mit Datum versehen
Es muss eine txt.Datei ausgelesen werden, in der mehrere Zeilen existieren.
Innerhalb der Zeilen kommt z.B. die Zeichenfolge 000008082539 vor. Identisch sind dabei immer die ersten 7 Zeichen, also 0000080.
Die komplette Zahl muss ausgelesen werden und in eine andere txt-Datei geschrieben werden.
Hinter diesem Eintrag muss dann das aktuelle Datum mit Uhrzeit erscheinen - also z.B. 000008082539 01.03.2007 14:12.
Die Zieldatei muss fortlaufend benannt werden.
Eine Kopie dieser Datei muss in ein Backup-Verzeichnis gelegt werden.
Wie kriege ich das in eine Batchdatei, die unter Windows 2000 läuft?
Gruß,
HoyGroDo
Innerhalb der Zeilen kommt z.B. die Zeichenfolge 000008082539 vor. Identisch sind dabei immer die ersten 7 Zeichen, also 0000080.
Die komplette Zahl muss ausgelesen werden und in eine andere txt-Datei geschrieben werden.
Hinter diesem Eintrag muss dann das aktuelle Datum mit Uhrzeit erscheinen - also z.B. 000008082539 01.03.2007 14:12.
Die Zieldatei muss fortlaufend benannt werden.
Eine Kopie dieser Datei muss in ein Backup-Verzeichnis gelegt werden.
Wie kriege ich das in eine Batchdatei, die unter Windows 2000 läuft?
Gruß,
HoyGroDo
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 52945
Url: https://administrator.de/forum/datei-auslesen-und-in-andere-datei-schreiben-und-mit-datum-versehen-52945.html
Ausgedruckt am: 25.12.2024 um 03:12 Uhr
18 Kommentare
Neuester Kommentar
Hallo HoyGroDo!
Grüße
bastla
- Der Beginn der Zeichenfolge ist am String "0000080" zu erkennen - wie findet man das Ende?
- Kommt die Zeichenfolge in der Quelldatei einmal oder mehrmals vor?
- Die gefundene Zeichenfolge (inkl Datum und Uhrzeit) soll in eine andere Textdatei geschrieben werden, diese muss fortlaufend benannt sein - daher für jede gefundene Zeichenfolge eine einzelne, aufsteigend nummerierte Datei?
- Wenn ja, welches Format soll der Dateiname haben?
- Und: Spricht etwas gegen die Verwendung des für eine derartige Aufgabenstellung besser geeigneten VBScript?
Grüße
bastla
...und, ergänzend zu bastla's Nachfragen:
Gruss
Biber
- steht der Suchstring jeweils am Zeilenanfang oder irgendwo in einer 2850 Zeichen langen Zeile?
- Die Zieldatei: Steht die irgendwo oder in einem bestimmten Verzeichnis? hat die vor der Nummerierung auch irgendeinen Namen? Wie gross wird der Nummernkreis? Von 001 bis 999? Von 00000001 bis 999999999?
- Ist es schlau, jeweils nach der "kompletten Zahl" Datum und Uhrzeit zu schreiben? Bei 777 Fundstellen 777mal? Dasselbe Datum incl. Uhrzeit pappt doch ohnehin "aussen" an der Datei dran als "Erstellungsdatum"?
- Eine Kopie ins Backup-Verzeichnis? Hä? Das hat doch aber nichts mit diesem Suchstring-Zirkus zu tun? Ich mache doch nicht von jeder neu erzeugten Datei in Echtzeit sofort ein Backup?
Gruss
Biber
Hallo,
um die datei fortlaufend zu schreiben, musst Du die Dateien erstmal zählen1 Das geht mit
for /r c:\temp\ %i in (*.*) do set /a x +=1
Hier im Beispiel im Verzeichnis "c:\temp\" und die Anzahl steht dann in der Variablen "x"
Dann nimmst Du die Datei mit den Zeilen die Du auswerten möchtest und zählst diese auf und schreibst die Zeilen gleich mit Datum und Uhrzeit in die neue Datei
for /f "eol=; tokens=1" %i in (dateiname.???) do echo %i %date% %time% >c:\temp_%x%.log
Wenn Du das in einem Batch schreibst, musst Du die %-zeichen doppelt schreiben!!
Gruß aus Köln
um die datei fortlaufend zu schreiben, musst Du die Dateien erstmal zählen1 Das geht mit
for /r c:\temp\ %i in (*.*) do set /a x +=1
Hier im Beispiel im Verzeichnis "c:\temp\" und die Anzahl steht dann in der Variablen "x"
Dann nimmst Du die Datei mit den Zeilen die Du auswerten möchtest und zählst diese auf und schreibst die Zeilen gleich mit Datum und Uhrzeit in die neue Datei
for /f "eol=; tokens=1" %i in (dateiname.???) do echo %i %date% %time% >c:\temp_%x%.log
Wenn Du das in einem Batch schreibst, musst Du die %-zeichen doppelt schreiben!!
Gruß aus Köln
Hallo HoyGroDo!
Zum Dateinamen:
Grüße
bastla
Zum Dateinamen:
- Besteht dieser nur aus der Nummer (ab "000000001") und einer Extension (".txt")?
- Wie komme ich zur letzten verwendeten Nummer - aus den Dateinamen im Backup-Ordner auslesen?
- Wenn ja: Befinden sich in diesem Ordner nur die nummerierten Dateien?
- Alternativ böte sich die Speicherung der letzten Nummer in einer Textdatei an.
Grüße
bastla
ups ich war etwas zu tief, also nochmal:
Hallo,
um die datei fortlaufend zu schreiben, musst Du die Dateien erstmal zählen1 Das geht mit
for /r c:\temp\ %i in (*.*) do set /a x +=1
Hier im Beispiel im Verzeichnis "c:\temp\" und die Anzahl steht dann in der Variablen "x"
Dann nimmst Du die Datei mit den Zeilen die Du auswerten möchtest und zählst diese auf und schreibst die Zeilen gleich mit Datum und Uhrzeit in die neue Datei
for /f "eol=; tokens=1" %i in (dateiname.???) do echo %i %date% %time% >c:\temp_%x%.log
Wenn Du das in einem Batch schreibst, musst Du die %-zeichen doppelt schreiben!!
Gruß aus Köln
Hallo,
um die datei fortlaufend zu schreiben, musst Du die Dateien erstmal zählen1 Das geht mit
for /r c:\temp\ %i in (*.*) do set /a x +=1
Hier im Beispiel im Verzeichnis "c:\temp\" und die Anzahl steht dann in der Variablen "x"
Dann nimmst Du die Datei mit den Zeilen die Du auswerten möchtest und zählst diese auf und schreibst die Zeilen gleich mit Datum und Uhrzeit in die neue Datei
for /f "eol=; tokens=1" %i in (dateiname.???) do echo %i %date% %time% >c:\temp_%x%.log
Wenn Du das in einem Batch schreibst, musst Du die %-zeichen doppelt schreiben!!
Gruß aus Köln
Hallo HoyGroDo!
Versuch es einmal so:
Speichere die Batchdatei nach Anpassung der Pfade in den ersten beiden Zeilen zB unter "D:\Bearbeite.bat" und rufe sie mit
auf.
Grüße
bastla
Versuch es einmal so:
@echo off & setlocal
set ZielOrdner=Z:\Test
set BackupOrdner=Z:\Backup
set String=0000080
set Nr=
for /f %%i in ('dir "%BackupOrdner%" /b /o-n') do if not defined Nr set /a Nr=%%~ni
set /a Nr +=1000000001
set ZielDatei=%Nr:~-9%.txt
for /f %%i in ('findstr "%String%" "%1"') do echo %%i %date% %time:~0,5% Uhr>>"%ZielOrdner%\%ZielDatei%"
copy "%ZielOrdner%\%ZielDatei%" "%BackupOrdner%\%ZielDatei%"
D:\Bearbeite.bat abcd1234.abc
Grüße
bastla
...und (wieder mal ergänzend zu bastla), je nachdem ob
Mögliche Aufrufe dann:
Gruss Biber
P.S. Mit meiner Frage nach: "hat die [Zieldatei] vor der Nummerierung auch irgendeinen Namen?" meinte ich das, was bastla verständlicher formuliert hat: "Besteht dieser nur aus der Nummer (ab "000000001") und einer Extension (".txt")? "
- in der Regel immer dieselbe Quelldatei x-mal nach verschiedenen Suchstrings durchflöht werden soll oder
- x verschiedene Quelldateien nach immer wieder dem gleichen Suchstring,
::Bearbeite.bat Parameter1=Quelldateiname Parameter2=Suchstring
@echo off & setlocal
set ZielOrdner=Z:\Test
set BackupOrdner=Z:\Backup
<b>Set "String=%2"
if [%2]== set "String=0000080"</b>
Set Nr=
for /f %%i in ('dir "%BackupOrdner%" /b /o-n') do if not defined Nr set /a Nr=%%~ni
set /a Nr +=1000000001
set ZielDatei=%Nr:~-9%.txt
for /f %%i in ('findstr "%String%" "%1"') do echo %%i %date% %time:~0,5% Uhr>>"%ZielOrdner%\%ZielDatei%"
copy "%ZielOrdner%\%ZielDatei%" "%BackupOrdner%\%ZielDatei%"
REM Tippfehlerkorrektur s.u.; ALT:<i> copy "%ZielOrdner%\%ZielDatei%" "%BackupOrdner%\%ZielDatei</i>
Mögliche Aufrufe dann:
D:\Bearbeite.bat abcd1234.abc
D:\Bearbeite.bat abcd1234.abc 0000080
for %i in (0000081 0000082 0000099) do call D:\Bearbeite.bat abcd1234.abc %i
for %i in (abcd0001 abcd1234 abcd7777) do D:\Bearbeite.bat %i 0000080
...etcD:\Bearbeite.bat abcd1234.abc 0000080
for %i in (0000081 0000082 0000099) do call D:\Bearbeite.bat abcd1234.abc %i
for %i in (abcd0001 abcd1234 abcd7777) do D:\Bearbeite.bat %i 0000080
Gruss Biber
P.S. Mit meiner Frage nach: "hat die [Zieldatei] vor der Nummerierung auch irgendeinen Namen?" meinte ich das, was bastla verständlicher formuliert hat: "Besteht dieser nur aus der Nummer (ab "000000001") und einer Extension (".txt")? "
Hallo HoyGroDo!
Ändere die Zeile
auf
wie oben gezeigt - nur so kann die folgende Abfrage "if not defined Nr" funktionieren ...
Außerdem solltest Du in der "copy"-Zeile auch noch das schließende Anführungszeichen ans Ende setzen (hatte ich vorher nicht erwähnt, sorry) - dies für den Fall, dass Dein Backup-Pfad einmal eine Leerstelle enthalten könnte.
Grüße
bastla
Ändere die Zeile
Set Nr=000000000
Set Nr=
Außerdem solltest Du in der "copy"-Zeile auch noch das schließende Anführungszeichen ans Ende setzen (hatte ich vorher nicht erwähnt, sorry) - dies für den Fall, dass Dein Backup-Pfad einmal eine Leerstelle enthalten könnte.
Grüße
bastla