Per FTP mit Windows-Bordmitteln Unterverzeichnisse übertragen (rekursives FTP)
Was unter Linux kein Problem ist, stellt mit Windows-Bordmitteln eine nicht zu erreichende Hürde da: der Transfer von Ordnerstrukturen mit Hilfe des Kommandozeilen-Tools FTP (auch rekursives FTP genannt). Der eine oder andere Admin wird jetzt erstaunt sein, dass dies auch mit Batchdateien und FTP.EXE möglich ist. Dazu ist allerdings einiges an Batch-Know-How erforderlich.
Batchdatei 1 (rftp.bat):
@echo off
rem ************************************************************
rem * Batchdatei zum rekursiven Übertragen von Dateien per FTP *
rem * Adminbox.de, Version 08.12.09 *
rem ************************************************************
rem Verzeichnisliste erstellen...
mkdir c:\temp >nul
rem Aufbau des FTP-Skriptes...
echo open SERVER-IP >c:\temp\ftp.skr
echo USER>>c:\temp\ftp.skr
echo PASS>>c:\temp\ftp.skr
echo prompt >>c:\temp\ftp.skr
echo bin >>c:\temp\ftp.skr
for /F %%I IN ('dir /b /s /ad') DO call c:\scripts\rftp_lib.bat %%I\* %%~pI%%~nI
echo quit >>c:\temp\ftp.skr
rem FTP-Verbindung aufbauen...
ftp -s:C:\temp\ftp.skr
Batchdatei 2 (rftp_lib.bat):
@echo off
rem *** Hilfsbatch für rftp.bat
set rftp=%2
set rftp=%rftp:~1%
echo mkdir %rftp% >>c:\temp\ftp.skr
echo cd %rftp% >>c:\temp\ftp.skr
echo mput %1 >>c:\temp\ftp.skr
echo cd \>>c:\temp\ftp.skr
Wie funktionieren diese Batchdateien?
Zunächst wird durch die RFTP.BAT ein temporärer Ordner C:\TEMP erstellt. Ist dieser bereits vorhanden, kommt es zu einer Fehlermeldung, die getrost ignoriert werden kann (wer es eleganter mag, kann hier eine Überprüfung auf C:\TEMP\NUL durchführen, um die Fehlermeldung zu beseitigen). Jetzt wird ein Skript mit FTP-Befehlen aufgebaut, dass später an das Kommandozeilentool FTP.EXE übergeben wird (die Angaben SERVER-IP, USER, PASS müssen durch die entsprechenden Werte ersetzt werden).
Interessantes passiert jetzt in der FOR-Schleife: Die Ausgabe des DIR-Befehls wird umgeleitet in die Variable %I (der DIR-Befehl zeigt nur Verzeichnisse an). An die Hilfsbatch rftp_lib.bat werden die Parameter %%I (das jeweilige Laufwerk+Verzeichnis und nur das Verzeichnis übergeben (“%%~pI%%~nI). In der Hilfsbatch wird jetzt der Parameter %2 zerschnitten: das erste und zweite Zeichen entfallen, alles nach dem 2. Zeichen wird in die Variable %rftp% übernommen (die Zählung beginnt mit Offset 0). Danach wird das FTP-Skript um Befehle zum Verzeichnis erstellen, Verzeichnis wechseln und schließlich zur Dateiübertragung erweitert.
In der ursprünglichen Batch wird nun die FTP.SKR an das Kommandozeilen-Tool FTP.EXE übergeben und abgearbeitet.
hallo erstmal!
habe einige fragen zum batchfile (bin anfänger blutiger noch dazu).
mkdir c:\temp >nul erstellt die ordnerstruktur die hochgeladen wird. verstehe ich das richtig?
bei “echo prompt” und “echo bin” weiß ich schon mal nicht was die machen?
und von der for schleife will ich gar nicht reden:
for /F %%I IN (‘dir /b /s /ad’) DO call c:\scripts\rftp_lib.bat %%I\* %%~pI%%~nI
was macht %%I IN (‘dir /b /s /ad’)
call ruft die 2. bat auf.
was macht die %%I\* und was heißt %%~pI%%~nI?
echo quit >>c:\temp\ftp.skr beendet die http://ftp.skr aber warum ?
das zur ersten die zweite folgt sogleich:
warum brauchts die zweite?
was die befehle genau machen blick ich auch nicht durch…
Parameter %2 zerschnitten was heißt das?
set rftp=%2  set rftp=%rftp:~1% für was ist dieser befehl?echo mkdir %rftp% >>c:\temp\ftp.skr erstellungecho cd %rftp% >>c:\temp\ftp.skr wechselecho mput %1 >>c:\temp\ftp.skr  übertragungecho cd \>>c:\temp\ftp.skr und der hier?
also ich versteh hier einiges nicht, ich hoffe auf hilfe.
grüßeÂ
cisab
Hallo Cisab,
zu Deinen Fragen:
mkdir c:\temp >nulerstellt nicht die Ordnerstruktur, sondern erstellt auf C: nur einen temporären Ordner für die Zwischenspeicherung des FTP-Skriptes. Dieser Ordner ist in den meisten Fällen eh vorhanden, der Befehl führt daher zu einer Fehlermeldung, die mit “>nul” unterdrückt wird. So ist das Batchfile sicher, dass der Ordner C:\temp auf jeden Fall existiert.Zum Thema “echo prompt” und “echo bin” empfehle ich Dir die Hilfe von http://FTP.EXE. Einfach über START/Ausführen/CMD eingeben. An der Kommandozeile dann “FTP” (ohne Anführungszeichen) eingeben und Enter drücken. Du befindest Dich jetzt in der FTP-Konsole. Mit dem Befehl
help promptbzw.help binkannst Du die (zugegebenermaßen magere) Hilfe zu diesen Befehlen aufrufen.Die Schleife ist wirklich etwas komplizierter:
Der Befehl
dir /b /s /adgibt alle Ordner (/ad) unterhalb des aktuellen Ordners (/s) in Kurzform (/b) aus. Diese Ausgabe wird in der FOR-Schleife zur weiteren Bearbeitung benutzt.FOR /Fbedeutet: mache irgendwas mit jeder Zeile, die aus dem Befehl in den Kammern kommt (das kann übrigens auch eine Textdatei sein, siehe Hilfe zum Befehl FOR). In der Variablen %%I steht nun die einzelne Zeile. Im DO-Teil der FOR-Schleife wird die zweite Batch mit den Parameter %%I (also eine Zeile ausDIR /b /s /ad) und einer bearbeiteten Fassung von %%I übergeben. %%~pI%%~nI solltest Du vielleicht mal selbst in einer Testbatch verwenden, um zu sehen, was passiert. Mehr dazu: START/Ausführen/CMD und dannhelp foreingeben.“echo quit >>c:\temp\ftp.skr” beendet die FTP-Kommandozeile, nicht die Batchdatei. QUIT ist ein FTP-Befehl.
Die zweite Batchdatei wird benötigt, weil auf jede Zeile aus der FOR-Schleife mehrere Befehle angewendet werden. Dies ist einer FOR-Schleife nicht möglich. Man kann jedoch eine Batchdatei aufrufen, die ihrerseits die übergebenen Parameter wunschgemäß verarbeitet.
%2 ist der zweite Parameter, der an die Batchdatei übergeben wurde.
set rftp=%rftp:~1%sorgt dafür, dass aus der Variablen %rftp% das erste Zeichen elimiert wird.echo mkdir %rftp%sorgt dafür, dass der FTP-Kommandointerpreter das Verzeichnis erstellt, weil der Befehl in die http://FTP.SKR geschrieben wird.Diese Batchdatei ist für Anfänger sicher nichts, aber ich nehme das mal als Anregung auf, hier einen kleinen Batchkurs zu veröffentlichen.
danke!!