BATch-Dateien - automatisierter FTP-Transfer

FTP-Befehle und wie man den Dateitransfer automatisiert.

Einleitung

Immer wieder einmal gibt es die Anforderung, einzelne Dateien von einem anderen Server - z.B. vom Webhoster - herunterzuladen.

Hinweis:

FTP ist ein unsicheres Protokoll, da alle Daten einschl. dem Passwort unverschlüsselt übertragen werden. Das heisst: Auf dem Log in deinem Router daheim oder der Firewall in der Firma sind diese im Log lesbar.

SSH ist die weit bessere Wahl und mit rsync via SSH geht der Abgleich weit eleganter.

FTP-Kommandos

Mit Windows wird ein FTP-Client mitgeliefert: die ftp.exe im Windows-Verzeichnis. Wer die FTP-Kommandos nicht kennt, bevorzugt sicherlich grafische FTP-Clients.
An dieser Stelle brauche ich aber die Kommandos, weil ich in verschiedenen Ordnern immer ein und dieselbe Datei herunterlade. Welche Kommandos der FTP-Client versteht, sehen Sie nach der Eingabe von help im FTP-Modus:

D:\>ftp
Ftp> help
Befehle können abgekürzt werden. Befehle sind:
 
!               delete          literal         prompt          send
?               debug           ls              put             status
append          dir             mdelete         pwd             trace
ascii           disconnect      mdir            quit            type
bell            get             mget            quote           user
binary          glob            mkdir           recv            verbose
bye             hash            mls             remotehelp
cd              help            mput            rename
close           lcd             open            rmdir
Ftp> by
 
D:\>
Hilfe von FTP (Windows98 ... bis zu Win7)


Einen kurzen Hinweis, wofür die einzelnen Kommandos gut sind, sehen Sie nach der Eingabe help [Kommando].

FTP-Skript zusammenstellen

Mit diesen Kommandos muss unser FTP-Automatismus beschrieben werden können. Ich erkläre mal die Wichtigsten für den Einstieg:

  • OPEN [Name des FTP-Servers]
    Öffnet eine FTP-Verbindung zum genannten FTP-Server. Es folgen daraufhin die Abfrage von User und Passwort
  • ASCII (auch ASC) oder BIN
    Übertragungsmodus auf Ascii oder Binär setzen.
  • CD [Verzeichnis]
    Wechsel des Verzeichnisses am FTP-Server
  • LCD [Verzeichnis]
    Wechsel des Verzeichnisses am Client (auf dem eigenen Rechner)
  • GET [Quell-Datei am Server] [Ziel-Datei lokal]
    lädt eine einzelne (!) Datei herunter (*). Wenn Name der Zieldatei fehlt, wird der Dateiname der Quelldatei übernommen.
  • PUT [Quell-Datei lokal] [Ziel-Datei am Server]
    lädt eine einzelne Datei hoch. Wenn Name der Zieldatei fehlt, wird der Dateiname der Quelldatei übernommen.
  • CLOSE; BYE
    CLOSE schliesst eine FTP-Verindung; mit BYE wird zusätzlich der FTP-Modus verlassen


(*) Anmerkungen:
Um mehrere Dateien auf- oder herunterzuladen gibt es die Befehle MPUT und MGET. Allerdings kann man damit nicht rekursiv einen ganzen Verzeichnisbaum verarbeiten - dies ist mit FTP nicht möglich. An dieser Stelle helfen andere Tools weiter, wie z.B. NCFTP (Freeware für div. Plattformen - u.a. auch Windows).

So sieht mein Skript, dass in der Datei hole_logfiles.ftp gespeichert wurde, in vereinfachter Form aus. Es entspricht der Abfolge der manuell einzugebenden FTP-Kommandos, wobei jede Zeile mit [Return] abgeschlossen wird.

open [FTP-Server]
[FTP-username]
[Passwort]
 
hash
asc
 
lcd F:\Webserver\htdocs\searchlog
cd /searchlog
get searchhistory.txt
 
prompt
 
lcd F:\Webserver\htdocs\logfiles
cd /logfiles
mget *
 
by
FTP-Script


Was sicherheitsrelevant ist, ist zweifelsohne die Angabe von Username und Passwort im Klartext. Für private Anwendungen daheim ist dies aber sicher kein Hindernis.

Aufruf via Batchfile

Die ftp.exe kann neben dem interaktiven Modus (an der Kommandozeile) ein Skript verarbeiten, indem der Parameter -s hergenommen wird:

@echo off
echo --- starte FTP-Transfer...
ftp -s:hole_logfiles.ftp
echo --- fertig.
pause
Batchfile zum Aufruf des automatischen FTP


Unter LINUX/ UNIX kann man das FTP-Skript in das ftp einleiten:

ftp < hole_logfiles.ftp

Download

In der hier angegebenen ZIP-Datei finden Sie die HOLE_LOGFILES.BAT:
hole_logfiles.zip (1 kB)