ladnax
Goto Top

Skript für FTP Download

Hallo zusammen,

ich hoffe ich bin hier richtig und darf meine Frage stellen:
Es geht darum, dass ich gerne von einem FTP-Server mehrmals täglich automatisch Daten abrufen kann. Es kommen täglich neue Daten hinzu.

Erschwerenderweise sollen die Dateien auch noch in verschiedene Ordner gelegt werden. Es geht um diese beiden Dateitypen:
04811_dr_20200416135753.txt und 04811_de_202004161203144832.txt. Es ändern sich an den Namen nur die Ziffern nach dem letzten _.

Jetzt sollte die Dateien mit 04811_dr_ in den Ordner "Uschi" und die Datei 04811_de_ in den Ordner "Horst".

Ich habe folgendes versucht mir aus dem Netz zu besorgen, leider ohne Erfolg, daher hoffe ich auf Hilfe hier! Zur Info: Habe eine Batch-Datei mit einer .ftp Datei erstellt, in der folgendes steht:

open ftp.uschihorst.com
user-uschi
password-horst

bin
 
lcd D:\download\Uschi
cd /docs
mget 04811_dr_*.txt

prompt
 
lcd D:\download\Horst
cd /docs
mget 04811_de_*.txt
 
bye

Über ein paar Tipps wär ich mehr als dankbar! Vielen lieben Dank!!!

Content-ID: 565279

Url: https://administrator.de/contentid/565279

Ausgedruckt am: 25.11.2024 um 17:11 Uhr

beidermachtvongreyscull
beidermachtvongreyscull 16.04.2020 um 18:15:18 Uhr
Goto Top
Hi,

Bin mobil unterwegs, deswegen die Kurzfassung.

Dieses Codesnippet kannst Du nicht in eine Batch packen.

Das ist ein ftp-Script für den Ftp-Client.

Öffne Mal die Eingabeaufforderung und Gib ein

ftp /?

Dann solltest Du sehen, wie es gemacht wird.
ricardobohner
ricardobohner 17.04.2020 um 02:18:49 Uhr
Goto Top
Hallo ladnax

Erst machst du eine script datai wo du alle Komandos reinmachst die du ausführen willst ohne diesen "open ftp.uschihorst.com "teil ex:

script.txt:
user-uschi
password-horst
bin
lcd D:\download\Uschi
cd /docs
mget 04811_dr_*.txt
prompt
lcd D:\download\Horst
cd /docs
mget 04811_de_*.txt
bye

Dann kriierst du eine einfache batch datei die die script datei aufruft und wo auch der ftp server spezifiziert wird:

batch.bat:

ftp -s:script.txt ftp.uschihorst.com
Fertig das wars, viel glück.
ladnax
ladnax 17.04.2020 um 09:14:04 Uhr
Goto Top
Vielen Dank für die bisherigen Antworten!

Bin allerdings noch nicht weitergekommen. Ich hatte im Eingangspost vergessen zu schreiben, dass ich das über eine Batchdatei mache. Die sah/sieht momentan so bei mir aus:

Batch-Datei:
@echo off
echo --- starte FTP-Transfer….
ftp -s:ftpdownload.ftp
echo ---fertig.
pause

Die der .ftp-Datei jetzt so:
open ftp.uschihorst.com
user-uschi
password-horst
bin
lcd D:\download\Uschi
cd /docs
mget 04811_dr_*.txt
prompt
lcd D:\download\Horst
cd /docs
mget 04811_de_*.txt
bye

Leider lädt er mir ganz nichts runter. Es startet das CMD und das erscheint und bleibt geöffnet:
--- starte FTP-Transfer.
ftp> open ftp.uschihorst.com
Verbindung mit ftp.uschihorst.com wurde hergestellt.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-Local time is now 09:09. Server port: 21.
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 30 minutes of inactivity.
200 OK, UTF-8 enabled
Benutzer (ftp.uschihorst.com:(none)):
331 User user-uschi OK. Password required

230 OK. Current restricted directory is /
ftp> bin
200 TYPE is now 8-bit binary
ftp> lcd D:\download\Uschi
Lokales Verzeichnis jetzt D:\download\Uschi
ftp> cd /docs
250 OK. Current directory is /docs
ftp> mget 04811_dr_*.txt
200 TYPE is now 8-bit binary
mget 04811_dr_20200416135753 - Kopie - Kopie (2).txt? prompt
mget 04811_dr_20200416135753 - Kopie - Kopie (3).txt? lcd D:\download\Horst
mget 04811_dr_20200416135753 - Kopie - Kopie (4).txt? cd /docs
mget 04811_dr_20200416135753 - Kopie - Kopie (5).txt? mget 04811_de_*.txt
mget 04811_dr_20200416135753 - Kopie - Kopie.txt? bye
mget 04811_dr_20200416135753 - Kopie.txt? mget 04811_dr_20200416135753.txt? ftp>

Aber passieren tut nichts. Es werden keine Dateien abgelegt!
AlRoDiSa
AlRoDiSa 17.04.2020 aktualisiert um 10:24:00 Uhr
Goto Top
Moin,

ich würde Uschi und Horst jeweils getrennt nacheinander von der Batch aufrufen lassen.

dürfte dann klappen

open ftp.uschi.com
user-uschi
password-uschi
bin
lcd D:\download\Uschi
cd /docs
prompt
mget 04811_dr_*.txt
bye

...dann den von Horst...


Alternativ kann man auch das "lcd"-Kommando weglassen und dafür jeweils eingeben und dann in einem Rutsch

... 
mget 04811_dr_*.txt "D:\download\Uschi\04811_dr_*.txt"  
mget 04811_de_*.txt "D:\download\Horst\04811_de_*.txt"  
...

Viel Erfolg
ladnax
ladnax 17.04.2020 um 10:35:34 Uhr
Goto Top
Hi!

Sensationell, ich bin begeistert, das erste hab ich gerade getestet und es funktionierte direkt!!! face-smile)))

Jetzt nur noch zwei weitere Punkte:
Ist es möglich, dass die Daten automatisch nach Download gelöscht werden?
Aktuell muss ich das CMD immer per Hand schließen. Geht das auch automatisch?

Vielen Dank!
143728
143728 17.04.2020 aktualisiert um 11:58:40 Uhr
Goto Top
Alter nutzt du noch plain FTP??
Schon der Sicherheit wegen würde ich heutzutage direkt zu WinSCP greifen und über einen sicheren Kanal abfackeln statt die Passwörter im Klartext durch den Äther zu blasen. Das macht dir zusätzlich vieles automatisch, bis hin zu Synchronisierungsaufgaben und vieles mehr und du kannst auch Fehler besser handeln als mit dem vollkommen veralteten Spielzeug ftp in Windows.
Ist es möglich, dass die Daten automatisch nach Download gelöscht werden?
mdel 04811_dr_*.txt

help mdel im ftp prompt eintippen hilft gegen die Leere im Kopf face-wink.
AlRoDiSa
AlRoDiSa 17.04.2020 um 11:48:13 Uhr
Goto Top
"Aktuell muss ich das CMD immer per Hand schließen. Geht das auch automatisch?"

ersetze das PAUSE durch EXIT in der Batch...

Ich hoffe, dass der FTP-Server im eigenen Netzwerk läuft ansonsten sollte man sich um die Sicherheit ein wenig mehr Gedanken machen

wie cabrinha schon sagte...
ricardobohner
ricardobohner 17.04.2020 um 11:49:14 Uhr
Goto Top
Um die datai anschliessend zu schliessen must halt nur das pause entfernen:

@echo off
echo --- starte FTP-Transfer….
ftp -s:ftpdownload.ftp
echo ---fertig.
ladnax
ladnax 17.04.2020 um 12:15:45 Uhr
Goto Top
Vielen Dank für die vielen Antworten!

Ich komme auch immer ein Stückchen weiter. Also der FTP steht in den eigenen Räumlichkeiten. Wird durch ein Programm "gefüttert". Da sollte es keine Sicherheitsbedenken geben.

Durch entfernen des pause Befehls schließt sich jetzt auch das CMD. Allerdings stark zeitverzögert. Ich kann noch den Befehl "bye" lesen und dann steht es für mind 15 Sekunden. Dann erst wird geschlossen.

Den "mdel" Befehl habe ich auch eingebaut, aber da passiert leider nichts. An dieser Stelle bleibt das Fenster locker 1 Minute so stehen und schließt dann. Kann das evtl. an einem Server-Time-Out liegen? Den werd ich wohl selbst nicht umgehen können?!
Oder an was könnte es sonst liegen? Lieben dank!
143728
143728 17.04.2020 aktualisiert um 12:43:22 Uhr
Goto Top
Zitat von @ladnax:
Also der FTP steht in den eigenen Räumlichkeiten. Wird durch ein Programm "gefüttert". Da sollte es keine Sicherheitsbedenken geben.
Die meisten Angreifer kommen aus dem eigenen Netz face-wink.
Durch entfernen des pause Befehls schließt sich jetzt auch das CMD. Allerdings stark zeitverzögert. Ich kann noch den Befehl "bye" lesen und dann steht es für mind 15 Sekunden. Dann erst wird geschlossen.
Dein prompt Befehl steht an der falschen stelle (zu spät) da wartet sich das Skript auf Eingaben die es nie bekommt.
Den "mdel" Befehl habe ich auch eingebaut, aber da passiert leider nichts. An dieser Stelle bleibt das Fenster locker 1 Minute so stehen und schließt dann. Kann das evtl. an einem Server-Time-Out liegen? Den werd ich wohl selbst nicht umgehen können?!
Oder an was könnte es sonst liegen? Lieben dank!
Berechtigungen, Encoding der Skriptdatei usw.

Wie gesagt, mit winscp lässt sich das alles viel besser handeln, würde ich dringend zu raten.
ladnax
ladnax 17.04.2020 um 12:47:42 Uhr
Goto Top
Mit winscp hab ich mich noch nie befasst. Mein Plan ist aktuell, dass ich diese Batchdatei in die Windows-Aufgaben Planung eintrage und das im Hintergrund abläuft. Ist das mit winscp auch möglich?
143728
143728 17.04.2020 aktualisiert um 13:16:53 Uhr
Goto Top
Zitat von @ladnax:

Mit winscp hab ich mich noch nie befasst. Mein Plan ist aktuell, dass ich diese Batchdatei in die Windows-Aufgaben Planung eintrage und das im Hintergrund abläuft. Ist das mit winscp auch möglich?
Selbstredend.
Beispiele mit winscp findest du hier im Forum, z.B.
FTP-Massenupload über Batch (CMD-Script) und Erstellung eines Log-Files
ladnax
ladnax 24.04.2020 um 13:33:16 Uhr
Goto Top
Hallo zusammen!

Ich konnte mein ursprüngliches Skript dank eurer Hilfe doch noch zum laufen bringen (auch ohne WinSCP). Allerdings habe ich seit heute (lief die ganze Woche perfekt) das Problem, dass bei Ausführung nach dem mget-Befehl folgende Meldung kommt:
server cannot accept argument

Dann geht nichts mehr weiter und das CMD Fenster steht. Ich habe nichts verändert etc. Was könnte das plötzlich sein?

Vielen Dank!