Zum Inhalt springen

Mittels FTP dateien laden


simsalabim

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Crash2001
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...