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.