simsalabim Geschrieben 21. April 2009 Teilen Geschrieben 21. April 2009 Hallo, ich habe eine etwas knifflige Aufgabe zu lösen, bei ich momentan einen Totalen blackout habe. Also es geht um folgendes. Ich muß mittels batchdatei eine FTP connection aufbauen, da geht ja noch einigermaßen. Dann muß ich Dateien laden, und diese auf meinen server ziehen, das geht auch noch, leider ist hier aber die schwierigkeit versteckt. ich darf nur bestimmte Dateien laden. Folgendes beispiel. Täglich bekommen wir eine bestimmte anzahl an dateien bereitgestellt. Die dateien haben eins gemeinsam, bämlich den gleichen Timestamp als präfix. Durch eine bestimmte datei kann ich auch erkennen, ob die bereitstellung der dateien abgeschlossen wurde. Diese hat den gleichen präfix und die endung .finished. Wie kann ihc jetzt mittles batch die zur .finished Datei gehörenden dateien abgereifeb und laden. Beispiel: 20090420155016.start 20090420155016_Kunden.csv 20090420155016_artikel.csv 20090420155016_verkauf.csv 20090420155016_einkauf.csv 20090420155016.finished 20090420165016.start 20090420165016_verkauf.csv 20090420165016_einkauf.csv Wie Ihr in dem besipiel sehen könnt, ist die Bereiststellung für die Dateien mit dem Timestamp 20090420155016 abgeschlossen, und die bereitstellung für die Dateien mit dem timestamp 20090420165016 hat begonnen. Die ersteren muß ich jetzt laden. Wie muss ich hier vorgehen, da ich von Batchprogrammierung keinen blassen schimmer habe. Es soll dann auch so sein, da immer die Jüngsten dateien geladen werden, da es ja mal sein kann, das der ladeprozess mal ausgesetzt wird. danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crash2001 Geschrieben 21. April 2009 Teilen Geschrieben 21. April 2009 also ich sehe da kein Problem. Dafür gibt es doch mput. Einfach ein mput 20090420155016* absetzen und schon sollten die gewollten Dateien alle hochgeladen werden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
allesweg Geschrieben 21. April 2009 Teilen Geschrieben 21. April 2009 Crash die Schwierigkeit ist, den Teil vor dem * herauszubekommen, also das Maximum vor dem .finished. @bytewarrier: Liegen ältere [timestamp].finished auch noch in diesem Ordner oder werden die Dateien nach dem Upload aus diesem Ordner entfernt? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Crash2001 Geschrieben 21. April 2009 Teilen Geschrieben 21. April 2009 (bearbeitet) Da sehe ich aber auch nicht wirklich ein Problem drin. Wenn ich das richtig sehe, dann gibt es ja zig Dateien mit .finished als Endung und die sind alle fertig, oder? Falls ja, dann kann man die mittels dir *.finished > liste.txt einfach in eine Datei schreiben. In der letzten zeile dann einfach das ".finished" abschneiden und den Rest als Variable einsetzen. So würde man z.B. aus der Listendatei alle Timestamps rausbekommen: For /f "Delims=." %%i In (liste.txt) do ( Echo %%I > liste2.txt ) Dann einfach den Dateinhalt in eine Variable speichern (oder halt direkt statt in eine Datei in eine Variable schreiben) und schon hast du den Timestamp. Und damit lässt sich dann ja arbeiten. (das war jetzt natürlich nicht die beste Lösung, aber eine, die mir auf die Schnelle so einfiel Dadurch dass nur ein > und kein >> verwendet wird, sollte in der Datei immer nur die letzte Ausgabe stehen. Und da ein Timestamp ja steigende Werte hat, sollte der letzte Wert ja der gesuchte sein. Bearbeitet 21. April 2009 von Crash2001 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
simsalabim Geschrieben 21. April 2009 Autor Teilen Geschrieben 21. April 2009 Hallo zusammen, vielen Dank für die Rege Beteiligung. Also um das Problem nochmals zu schildern hole ich etwas aus. wir bekommen täglich, vielleicht auch mehrmals täglich Dateien im csv Format geliefert. Der Prozess, der die csv Dateien erstellt legt zuerst eine timestamp.start an, dann kommen die eigentlichen Dateien im Format timestamp_dateiname.csv und zum Schluß die Timestamp .finished. Wichtig ist, dass es immer die gleiche Anzahl an Dateien sind, die wir geliefert bekommen. Als kennzeichen für uns, dass wir starten können ist die .finished datei. Hier müssen wir nun den Timestamp auslesen und alle dazugehörenden Dateien laden. ich hoffe ich habe das einigermaßen verständlich ausgedrückt. ich bin ja kein Programmierer , aber gelegentlich werde ich halt mal mit solchen Aufgaben versorgt. Vielen dank für eure Mühe. P.S Um auf die Frage von allesweg zu antworten: Nein, es befinden sich nur die Dateien darin, die bereitgestellt, aber noch nicht geladen wurden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
simsalabim Geschrieben 22. April 2009 Autor Teilen Geschrieben 22. April 2009 Hallo nochmal, ergänzend zu meinem vorher erläuterten Problem habe ich mich mal drangestetzt und versucht die Batchprozedur zu schreiben. leider weiß ich nicht, ob das alles so richtig ist. Was sagt iht dazu Skript OPEN <FTPSERVER> USER <USERNAME> <PASSWORT> BIN CD </VERZEICHNIS/AUF/DEM/SERVER/WO/DIEDATEIEN/LIEGEB> dir *.finished /B /ON >LADELISTE.txt FOR /f "Delims=." %%i In (LADELISTE.txt) Do ( ftp -v -i mget.%%i.*.*) QUIT Da ich mir alles aus dem Netz zusammengesucht habe, kann es sein, dass das alles Vogelwild ist. ich dachte mir das so. 1. Connection wird hergestellt 2. Es wird in das Verzeichnis gewechselt, wo die Dateien liegen. 3. Es werden alle *.finished Dateien in eine Datei geschrieben 4. Mittels einer Schleife wird dann für jede Datei aus der Ladeliste die jeweiligen enstprechenden Dateien mittels mget geladen.) geht das so???? danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.