Dateien umbenennen ohne dabei vorhandene Dateien zu überschreiben.
Hi,
Das Szenario:
1. Eine Batchdatei holt von einem FTP-Server Dateien eines bestimmten Types ab (ala *.txt) und speichert diese in ein Ordner "input". Diese Dateien beginnen mit einem Datum (yyyymmdd), gefolgt von weiteren 18 unbestimmten Zeichen und der Dateiendung.
2. Zur Weiterverarbeitung mit einem anderen System benötige ich allerding nur die letzte Datei mit einem festen Dateinamen (z.b. neudatei20050606.txt) im Verzeichnis "output".
Das Problem:
Normalerweise kommt vom FTP am Tag nur eine Datei die umbenannt werden muss. Es kann aber auch sein das es zwei oder mehr sind. In diesem Fall soll nur die letzte und damit neuste den festen Dateinamen erhalten und alle anderen bzw älteren des Tages mit einer Nummerierung versehen werden (zb: neuedatei20050606-1.txt, neuedatei20050606-2.txt). Bereits vorhandene Dateien sollten also nicht überschireben werden sondern umnummeriert werden.
Ein weiteres Problem was ich dabei hab, das auf dem FTP auch mit unter mehrere Dateien der vergangen Tage sein können. Das ganze müsste also abhängig vom Datum der Dateienamen sein (die ersten acht Zeichen).
Meine Frage:
Also ich hab es nun schon mal soweit hinbekommen das er die Dateien abholt und die Dateinamen in eine Datei schreibt (die neuste zuerst). Der Rest bereitet mir allerding Kopfschmerzen zumal als Scriptsprache in meinem Fall nur Batch zum Einsatz kommen darf.
Hat jemand eine Idee wie ich das Problem lösen könnte?
Danke und Gruß
Hellfighter
Das Szenario:
1. Eine Batchdatei holt von einem FTP-Server Dateien eines bestimmten Types ab (ala *.txt) und speichert diese in ein Ordner "input". Diese Dateien beginnen mit einem Datum (yyyymmdd), gefolgt von weiteren 18 unbestimmten Zeichen und der Dateiendung.
2. Zur Weiterverarbeitung mit einem anderen System benötige ich allerding nur die letzte Datei mit einem festen Dateinamen (z.b. neudatei20050606.txt) im Verzeichnis "output".
Das Problem:
Normalerweise kommt vom FTP am Tag nur eine Datei die umbenannt werden muss. Es kann aber auch sein das es zwei oder mehr sind. In diesem Fall soll nur die letzte und damit neuste den festen Dateinamen erhalten und alle anderen bzw älteren des Tages mit einer Nummerierung versehen werden (zb: neuedatei20050606-1.txt, neuedatei20050606-2.txt). Bereits vorhandene Dateien sollten also nicht überschireben werden sondern umnummeriert werden.
Ein weiteres Problem was ich dabei hab, das auf dem FTP auch mit unter mehrere Dateien der vergangen Tage sein können. Das ganze müsste also abhängig vom Datum der Dateienamen sein (die ersten acht Zeichen).
Meine Frage:
Also ich hab es nun schon mal soweit hinbekommen das er die Dateien abholt und die Dateinamen in eine Datei schreibt (die neuste zuerst). Der Rest bereitet mir allerding Kopfschmerzen zumal als Scriptsprache in meinem Fall nur Batch zum Einsatz kommen darf.
Hat jemand eine Idee wie ich das Problem lösen könnte?
Danke und Gruß
Hellfighter
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 11524
Url: https://administrator.de/contentid/11524
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
7 Kommentare
Neuester Kommentar
Moin Hellfighter,
ein, zwei Rückfragen noch zum Szenario, dann gern die Lösung:
1) Die Batch, die die Dateien vom FTP-Server holt:
?Wird die manuell gestartet oder als Task? Einmal am Tag oder unregelmäßig?
2) Brauchst Du die umbenannten Dateien am gleichen Tag oder erst morgen die von heute?
Sprich: muss berücksichtigt werden, dass eine bereits kopierte und umbenannte Datei nun doch nicht die aktuellste und erhaltenswerteste ist?
3) Willst Du den neuen Batch als Task laufen lassen oder manuell/unregelmäßig oder direkt vor und von der angedeuteten Weiterverarbeitung?
Frank / der Biber aus Bremen
ein, zwei Rückfragen noch zum Szenario, dann gern die Lösung:
1) Die Batch, die die Dateien vom FTP-Server holt:
?Wird die manuell gestartet oder als Task? Einmal am Tag oder unregelmäßig?
2) Brauchst Du die umbenannten Dateien am gleichen Tag oder erst morgen die von heute?
Sprich: muss berücksichtigt werden, dass eine bereits kopierte und umbenannte Datei nun doch nicht die aktuellste und erhaltenswerteste ist?
3) Willst Du den neuen Batch als Task laufen lassen oder manuell/unregelmäßig oder direkt vor und von der angedeuteten Weiterverarbeitung?
Frank / der Biber aus Bremen
Okay, Hellfighter,
den Batch würde ich wie folgt skizzieren:
(ein paar Pfade musst Du anpassen. die kenn ich nicht)
P.S. Die "if exist..." Zeilen sind tatsächliche je eine Zeile, auch wenn es hier aus dem Bildschirm umgebrochen wird bei "neuedatei..."
Hope it Helps
Frank / der Biber aus Bremen
den Batch würde ich wie folgt skizzieren:
(ein paar Pfade musst Du anpassen. die kenn ich nicht)
::-----Inhalt ftpcopy.bat
@echo off
Set datestring=
set filename=
set inputdir=D:\temp\input\
set targetdir=D:\temp\next\
:: Die Datei "ftpfiles.lst" in der nächsten Zeile soll die Dateinamen der abgeholten FTPFiles
:: enthalten. Wie immer die heißen mag bei Dir
if not exist %inputdir%ftpfiles.lst goto end
for /F %%i in (%inputdir%ftpfiles.lst) do call :loop %%i
:: und hier sollte auch die Datei "ftpfiles.lst" gelöscht werden oder auf Länge Null gesetzt
:: PLEASE UNCOMMENT, IF TESTED del %inputdir%ftpfiles.lst
goto end
:loop
set Filename=%1
Set Datestring=%Filename:~0,8%
if defined DEBUGBATCH echo %datestring%
if exist %targetdir%neuedatei%datestring%.txt (
if exist %targetdir%neuedatei%datestring%-4.txt (echo "Worst-Case war nicht worst genug!") && pause
if exist %targetdir%neuedatei%datestring%-4.txt goto end
if exist %targetdir%neuedatei%datestring%-3.txt rename %targetdir%neuedatei%datestring%-3.txt neuedatei%datestring%-4.txt
if exist %targetdir%neuedatei%datestring%-2.txt rename %targetdir%neuedatei%datestring%-2.txt neuedatei%datestring%-3.txt
if exist %targetdir%neuedatei%datestring%-1.txt rename %targetdir%neuedatei%datestring%-1.txt neuedatei%datestring%-2.txt
rename %targetdir%neuedatei%datestring%.txt neuedatei%datestring%-1.txt
)
copy %inputdir%%filename% %targetdir%neuedatei%datestring%.txt >nul
del %inputdir%%filename%
:end
::-----ende Inhalt ftpcopy.bat
Hope it Helps
Frank / der Biber aus Bremen
Gute Lektüren zu Batch? Ich hab leider noch keine gefunden.
Und was z.B mit den neuen "Befehlserweiterungen" von Win2000/XP geht, ist zwar formal korrekt in der M$-Hilfe beschrieben, aber Beispiele fehlen da auch.
Aber wenn man/frau sich damit mal ein Stündchen auseinandersetzt, sind erstaunliche Sachen möglich.. *gg
Da ich öfters mal die Rechner wechsele, habe ich beispielsweise immer eine inzwischen dreiseitige Batchdatei griffbereit, die ich ins Autostart-Verzeichnis kopiere.
Die macht mir jeden Rechner "wiedererkennbar": alle Laufwerke so gemappt, wie ich es blind erwarte, alle Pfade, alle Umgebungsvariablen bis runter zu meinem Lieblings-Dos-Prompt...etc...
Wir können ja mal abwarten, Hellfighter, ob jemand gute Lektüre dazu kennt und postet, wenn nicht, trümmer ich mal ein paar kleine HOW-TOs zusammen und poste die.
Schönen Tach Dir
Frank / der Biber aus Bremen
Und was z.B mit den neuen "Befehlserweiterungen" von Win2000/XP geht, ist zwar formal korrekt in der M$-Hilfe beschrieben, aber Beispiele fehlen da auch.
Aber wenn man/frau sich damit mal ein Stündchen auseinandersetzt, sind erstaunliche Sachen möglich.. *gg
Da ich öfters mal die Rechner wechsele, habe ich beispielsweise immer eine inzwischen dreiseitige Batchdatei griffbereit, die ich ins Autostart-Verzeichnis kopiere.
Die macht mir jeden Rechner "wiedererkennbar": alle Laufwerke so gemappt, wie ich es blind erwarte, alle Pfade, alle Umgebungsvariablen bis runter zu meinem Lieblings-Dos-Prompt...etc...
Wir können ja mal abwarten, Hellfighter, ob jemand gute Lektüre dazu kennt und postet, wenn nicht, trümmer ich mal ein paar kleine HOW-TOs zusammen und poste die.
Schönen Tach Dir
Frank / der Biber aus Bremen