Batch Datei erstellen

matthias321

New Member
Hallo zusammen,

ich bekomme von einem Kumpel täglich eine Textdatei (immer mit einem anderen Namen) per FTP Server übermittelt. Da ich jedesmal diese mir per FTP Server manuell herunterlade, suche ich nun nach einer einfacheren Möglichkeit.
Deshalb würde ich gerne eine Batch Datei erstellen, die es ermöglicht,
immer die aktuellste Datei aus diesem Ordner automatisch vom Server herunterzuladen.
Allerdings soll diese dann nicht vom Server gelöscht werden.
Es wäre schön, wenn mir jemand dabei helfen könnte.

Schöne Grüße
 
Hallo,

zunächst einmal vielen Dank für Ihr Antwort.
Ist es denn auch ohne externes Programm möglich?
Beispielsweise über eine FTP.Datei bzw. Textdatei?
 
Windows selbst kommt auf der Commandline mit "ftp", was Du - natürlich - auch per Batch steuern könntest.

Dazu findest Du natürlich auch Beispiele:
https://support.microsoft.com/en-us/kb/96269

Wildcards werden mit mget und mput unterstützt (z.B. mput *.txt).

Meine Empfehlung für WinSCP kommt aber daher, dass es unglaublich mächtige Scriptingmöglichkeiten bietet. Was Du verwendest ist letztlich natürlich Deine Entscheidung, ich finde es aber nie schlecht, wenn man noch ein paar zusätzliche Alternativen nennt, da der Thread dann für möglichst viele Szenarien interessant ist

Ps: falls es nicht unbedingt ftp sein muss und es um einen *nix Server geht, kann ich persönlich auch rsync wärmstens empfehlen. Mit einem Einzeiler synchronisiert man ein ganzes Verzeichnis (uni- oder bidirektional).
 
Last edited by a moderator:
Leider bin ich ziemlich unerfahren auf diesen Themengebiet,
deshalb verstehen ich davon nicht alt so viele was nur mir geschrieben hast.
Könntest du mir vielleicht eine Beispieldatei erstellen?

Schöne Grüße
 
Da findest Du auch genügend Beispiele:
http://stackoverflow.com/questions/16158138/how-to-ftp-with-a-batch-file

die erste Antwort enthält gleich ein "Batchfile", das zu einem Server verbindet und dort ein File runterlädt. Du ersetzt alles durch die richtigen Daten und statt mget file.csv benötigst Du mget *.txt.
Benenne das File z.B. test.ftp und führe es dann von der Befehlszeile aus mit:
Code:
ftp -i -s:test.ftp

Ist nicht böse gemeint aber ein bisschen Eigeninitiative will ich schon fördern, weil Du dann bei Problemen/Änderungen sofort weißt "ah, genau das muss ich ändern".

Informatiker werden auch nicht mit Wissen geboren und wir sind sicher auch nicht klüger, wir googlen nur mehr, lesen Anleitungen und probieren auch mal etwas rum ;).
 
Last edited by a moderator:
Hallo,

vielen Dank für diesen Link.
Solch eine Datei habe ich bereits erstellt, allerdings wird dann immer nur die Datei heruntergeladen die ich in der Datei (mit Bezeichnung) angebe.
Die Datei die jedoch immer wieder neu auf dem Server liegt, hat immer wieder einen anderen Namen, sodass ich diese nicht von vornherein bestimmen kann.

Schöne Grüße
 
Darum sagte ich ja: ersetze den Befehl durch mget *.txt

Der * ist wichtig, das ist eine Wildcard.
 
Eine genauere Angabe als "geht nicht" wäre mehr als hilfreich.
Wird z.B. "ftp" nicht gefunden? Das müsstest Du dann ggfls. noch über Windows Features installieren.

Bei mir gibt es jedenfalls ftp mit allen üblichen Befehlen, auch unter Windows 10.
 
Ich erhalte folgende Fehlermeldung:

ftp> mget *.txt
unable to perform list: Connection timed out: connect.
200 Type set to I.
Lister der Remotedatein kann nicht gefunden werden
ftp> disconnect
221 Goodbye.
ftp>
quit
 
Poste bitte mal das komplette File, am besten in
Code:
 tags. 
PW/User natürlich unkenntlich machen, IP brauchen wir auch nicht, einfach durch XXX ersetzen oder ähnliches.
 
Dieses ist die komplette folgenden Meldung die ich bekomme:
Code:
U:\test\Neuer Ordner\Bat.Datein\Test>ftp -s:DatenHolen.ftp
ftp> OPEN xxxxxxxx.de
Verbindung mit xxxxxxxxx.de wurde hergestellt.
220 Merry FTP server (IS FTP-Service, version 5.9.2) ready.
530 Please login with USER and PASS.
Benutzer (xxxxxxxx.de:(none)):
331 Password required for xxxxxxxx (xxxxxxx).

230 User xxxxxx logged in.
ftp>
ftp> lcd "C:\Users\Downloads"
Lokales Verzeichnis jetzt C:\Users\Downloads
ftp> cd upload/
250 CWD command successful.
ftp> binary
200 Type set to I.
ftp> mget *.txt
Unable to perform list: Connection timed out: connect.
200 Type set to I.
Liste der Remotedateien kann nicht gefunden werden.
ftp> disconnect
221 Goodbye.
ftp> quit
 
Last edited by a moderator:
<snip> Denkfehler.

Das Problem dürfte sein, dass Deine Firewall die ankommende Verbindung nicht zulässt, bzw. Dein Router (NAT).
Die einfachste Lösung dafür wäre der Passive Mode, der wird vom bei Windows mitgelieferten FTP aber nicht unterstützt.
Da benötigst Du dann leider trotzdem Winscp.

Die Symptomatik passt nämlich perfekt: Du kannst ohne Probleme eine Verbindung zum Server aufbauen. Dieser möchte dir dann Daten schicken, was nicht gelingt, da Dein Router/Firewall die Verbindung blockiert.

Beispiel für Winscp:
Erzeuge die Skriptdatei, hier nenne ich sie winscpscript.txt
Code:
option batch abort
option confirm off
open ftp://USER:PASSWORD@ZIEL
option transfer binary
get *.txt d:\ftptest\
close
exit

das get *.txt d:\ würde bedeuten, dass ich alle Dateien mit der Endung *.txt in das lokale Verzeichnis d:\ftptest\ downloade. Hier den \ am Ende nicht vergessen!

Das Skript kann dann ganz einfach aufgerufen werden (auch per Batchfile). Am konkreten Beispiel:
Code:
C:\Program Files (x86)\WinSCP>WinSCP.com /passive /script=d:\winscpscript.txt

Bitte vergiss keinesfalls das /passive!
 
Last edited by a moderator:
Also ich habe nun die Datei nochmal an einem anderen Rechner unter Windows 7 gestartet und dann kam diese Meldung:


PHP:
U:\test\Neuer Ordner\Bat.Datein\Test>ftp -s:DatenHolen.ftp
ftp> OPEN xxxxxxxx.de
Verbindung mit xxxxxxxxx.de wurde hergestellt.
220 Merry FTP server (IS FTP-Service, version 5.9.2) ready.
530 Please login with USER and PASS.
Benutzer (xxxxxxxx.de:(none)):
331 Password required for xxxxxxxx (xxxxxxx).

230 User xxxxxx logged in.
ftp>
ftp> lcd "C:\Users\Downloads"
Lokales Verzeichnis jetzt C:\Users\Downloads
ftp> cd upload/
250 CWD command successful.
ftp> binary
200 Type set to I.
mget desnve_schoeda20131018   .txt? disconnect
mget desnve_schoeda20131021   .txt? quit
 
Du benötigst noch "prompt" in Deinem Batchfile, damit wird nicht mehr nachgefragt.
Platziere es am besten vor mget

Ansonsten scheint die Firewall des ersten Rechners den aktiven Transfer zu blockieren, zumindest wenn beide Rechner am selben Router hängen.
 
und für die Firewall benötige ich dieses Programm WinScP??
Ich Frage deshalb, weil ich es gerne ohne ein externes Programm hinbekommen würde, da dieses nicht mein eigener Rechner ist und ich deshalb kein Programm darauf installieren kann.

Grüße
 
Der Punkt ist hier, dass ftp (also das bei Windows mitgelieferte Tool) immer eine aktive Verbindung aufbauen möchte.
Viele Firewalls lassen das aber nicht einfach so zu.
Dafür gibt es dann den passiven Modus, den z.B. Winscp unterstützt, ftp (also das Windowstool) aber nicht.

Natürlich kann man auch die Firewall anders konfigurieren aber da werde ich Dir nicht helfen können, da ich nur einen Router verwende und keine Desktopfirewall, wovon es eh die unterschiedlichsten Varianten gibt.
Zumal beides (Installation von Winscp und Konfiguration der Softwarefirewall des Rechners) Eingriffe in das System sind.

Von daher sehe ich 3 Möglichkeiten:
1) Du konfigurierst die Firewall anders
2) Du verwendest den Rechner, auf dem es funktioniert
3) Du verwendest Winscp

Bei Möglichkeit 1 und 2 musst Du im Skript nur noch das "prompt" vor "mget" ergänzen, dann fragt ftp nicht mehr nach sondern läuft einfach durch.
 
Last edited by a moderator:
Back
Top