Dateien automatisch per FTP herunterladen

Home / Ali Oukassi schreibt / Dateien automatisch per FTP herunterladen

Das war mal wieder typisch. Da hat sich ein Freund auf der Wiki von JTL umgesehen und ein Skript für den Download einer Datei vom Webserver per FTP auf den lokalen Rechner gesehen. Nur das Skript scheint irgendwie nicht das zu machen, was der Anwender erwartet. Prompt kommt der Post in der JTL-User-Community mit dem freundlichen Hinweis, ich könne sicher das Problem lösen. Wie die Menschen nur darauf kommen? Okay hier kommt die Lösung.

Für den automatischen Download per FTP gibt es mehrere Lösungsansätze. Zum einen könnten wir uns ein SKript mit WinSCP schreiben, was kein schlechter Gedanke ist. Der zweite Ansatz ist basierend auf der JTL-Wawi Wiki eine Batchdatei die ein FTP-Skript ausführt. Solange wir den Download nur auf einem Windows Client machen, reicht die Batchdatei völlig aus. Etwas anders sieht es aus, wenn wir den Download direkt auf einem Windows 2012 R2 oder Windows 2016 Server ausführen möchten. Hier kommt es trotz offener Firewall zu einem Fehler. Darum setzen wir dort das Tool WinSCP ein, das wir dann über die Aufgabenplanung starten.

Als erstes brauchen wir ein Verzeichnis auf unserem Server oder Windows PC, welches wir die notwendigen Batchdateien legen und welches als Ziel für unseren Download dienen soll. Dafür Legen wir uns irgendwo, am besten im Root einer Partition, einen Ordner an, z.B. C:Download. In diesem Ordner legen wir mit dem Editor zwei Dateien an. Eine mit dem sinnigen Namen download.bat und die andere nennen wir ftpdownload.ftp. In jedem Fall sollten wir im Vorfeld darauf achten, dass die Dateinamenserweiterungen angezeigt werden! Das ganze sieht dann in etwa so aus wie in den folgenden drei Screenshots.

Wenn wir die Dateien angelegt haben, können wir uns ans „Skripten“ machen. Zuerst legen wir die das Skript für den FTP-Download an und öffnen dazu im Editor die Datei ftpdownload.ftp.

Um unser Download-Skript anlegen zu können, brauchen wir jetzt folgende Informationen:

  1. Die Domain, auf der die Daten liegen, z.B. meinedomain.de
  2. Den FTP-Benutzernamen, z.B. webmaster
  3. Das geheime Passwort des FTP-Benutzers, z.B. [email protected]
  4. Den Pfad zur Datei auf dem Webspace, z.B. httpdocs/download
  5. Den Dateinamen der Datei die wir herunterladen wollen, z.B. test.txt

Aus diesen Informationen bauen wir uns jetzt folgendes Skript zusammen:

open meinedomain.de
webmaster
[email protected]
bin
lcd C:download
cd /httpdocs/download
get test.txt
bye

In den Script müsst ihr jetzt nur noch meine Beispieldaten durch eure ersetzen.

Jetzt bearbeiten wir die download.bat, mit der wir die ftpdownload.ftp aufrufen und den eigentlichen Download anstoßen. Hier tragen wir folgenden schönen 4-Zeiler ein:

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

Zum Testen empfiehlt es sich am Ende noch den Befehl Pause anzufügen, wie ihr aus dem Screenshot entnehmen könnt. Wollt ihr die Datei dann später über die Windows Aufgabenplanung automatisiert ausführen lassen, so solltet ihr danach diese Zeile wieder entfernen.

Delta Whiskey, das war es auch schon. Jetzt können wir mit einem mutigen Doppelklick unsere download.bat das erste Mal starten.

Teste ich das Skript auf einem Windows Server bekomme ich nach ein zwei Minuten die Fehlermeldung „425 Unable to build data connection: Connection timed out“. What to hell is this. Auch die Öffnung der Ports an der Firewall haben meinen Testserver nicht dazu verleiten lassen, die Test-Datei von meinem Webserver per FTP herunterzuholen. Shit happens!

Bleiben nur noch zwei Alternativen. Eine PowerShell-Skript oder der Einsatz von WinSCP. Ich habe mich für letzteres entschieden, da auch Dummys mit diesem Tool klarkommen sollten. WinSCP könnt ihr hier herunterladen: https://winscp.net/eng/download.php#download2

Die Installation von WinSCP ist selbsterklärend und ich glaube diese muss ich hier nicht weiter erläutern nach dem Start müsst wir uns mit unserem FTP-Server verbinden.

Anschließend klicken wir auf den Menü-Eintrag Sitzung und dort auf Erzeuge Sitzungs-URL/Code….

Im Reiter URL aktivieren wir die Optionen Benutzername, Passwort und wechseln anschließend in den Reiter Script.

Hier klicken wir auf den Button „In die Zwischenablage kopieren“ und öffnen anschließend den Windows Editor.

Den Text aus der Zwischenablage für wir in die neue Textdatei ein und löschen die Zeilen „# Ihr Befehl 1“ und „# Ihr Befehl 2“ heraus. Dafür die Zeile get /[Pfad zur Datei]/[Dateiname] [lokales Zielverzeichnis][lokaler Dateiname] ein. Das Ganze sollte dann so aussehen get /httpdocs/test.txt C:Downloadtest.txt

Die Datei speichern wir als ftpdownload.txt im Verzeichnis Download ab und rufen Sie über die Eingabeaufforderung auf. Dazu wechseln wir dort in das Installationsverzeichnis von WinSCP C:Program Files (x86)WinSCP und geben diesen Befehl ein winscp /script=“C:Downloadftpdownload.txt“

Das ganze kann man jetzt in eine einfache Aufgabe in Computerverwaltung Aufgabenplanung einbauen und dann wird die Datei einmal täglich vom Server heruntergeladen. Hier muss ich nur darauf achten, das ich unter Programm/Skript die WinSCP.exe auswähle und bei Argumente hinzufügen /script=“C:Downloadftpdownload.txt“ hinterlege. Fertig ist der automatische FTP-Download.

  • 4.5/5
  • 14 ratings
14 ratingsX
Very bad!BadHmmmOkeGood!
7.1%0%7.1%7.1%78.6%
Related Posts
Showing 5 comments
  • Avatar
    Harald Diedrichs

    Interessanter Artikel, der mir helfen wird.
    Kann man auch ein ganzes Verzeichnis downloaden?

  • Avatar
    Sniggers

    starte FTP-Transfer
    https://10.10.103.21: Unbekannter Host.
    ftp> mein Username
    Ungültiger Befehl
    ftp> mein Passwort
    Ungültiger Befehl

    das kommt im cmd.exe Fenster, natürlich mit meinen richtigen Anmelde Daten wenn ich die .bat datei starte.

    was habe ich vlt. falsch gemacht?

    • Avatar
      Sniggers

      https:// entfernt jetzt geht es.

  • Avatar
    Deura

    Der Artikel ist sehr interessant und hat mich schon etwas weiter gebracht, danke dafür.

    Wie sieht es damit aus, dass der gesamte Inhalt eines FTP-Ordners per Batch-Script abgeholt wird?

    Also nicht nur
    get test.txt
    sondern eventuell
    get *.*

    Gibt es hierzu einen passenden Befehl?

    Danke im Voraus.

    • Avatar
      eBakery

      Du kannst über get /*.* alle inhalte von FTp abholen. / ist für Root bedacht

Leave a Comment

Kontakt
Zertifzierter JTL WMS
Shopware Business Partner
Shopware Business Partner
Zertifizierter Shopware Partner
Zertifizierter Shopware Business Partner
Zertifizierter Shopware Template Designer
Zertifizierter Shopware Template Designer
pickware Partner
pickware Partner / Shopware
Xentral Gold Partner
VARIO BUSINESS PARTNER