Batch FTP Vezeichnis auslesen, mit lokalem Verzeichnis vergleichen, Upload Liste erstellen
kann mir jemand etwas Hilfestellung bei meinem oben genannten Vorhaben leisten? Es geht um folgende Aufgabenstellung:
Ein Verzeichnis auf einem FTP Server enthält Mediendateien (hauptsächlich *.flv). Ein lokales Verzeichnis enthält ebenfalls alle Dateien. Wenn ich nun eine neue flv erstellt habe, dann soll per Skript diese neue Datei auf den FTP-Server geladen werden, so dass der Inhalt der beiden Verzeichnisse wieder identisch ist.
Verzeichnisinhalt Lokal:
Media_Datei_2.flv
Media_Datei_3.flv
Media_Datei_4.flv
Verzeichnisinhalt FTP:
Media_Datei_2.flv
Media_Datei_3.flv
Bisher habe ich folgenden Entwurf:
Teil 1: Auslesen des Remote-Verzeichnis Inhaltes:
echo PASSWORT>>c:\mklistftp.txt
echo lcd c:\>>c:\mklistftp.txt
echo dir /media listftp.txt>>c:\mklistftp.txt
echo bye>>c:\mklistftp.txt
ftp -s:mklistftp.txt FTP.SERVERNAME.DE
del c:\mklistftp.txt
Inhalt der erstellten Datei listftp.txt:
-rw-r--r-- 1 ftp ftp 7169546 Sep 12 11:41 Media_Datei_2.flv
-rw-r--r-- 1 ftp ftp 7475796 Sep 12 11:44 Media_Datei_3.flv
Teil 2: Vergleichen des Lokalen Verzeichnisinhaltes d:\media mit den Einträgen in listftp.txt und erstellen einer FTP-Batch-Datei:
echo FTP.SERVERNAME.DE>>c:\putftp.txt
echo PASSWORT>>c:\putftp.txt
echo cd media>>c:\putftp.txt
::FTP Transfer Rumpf
for %%i in ("d:\media\*.*") do (
for /f "tokens=9 delims= " %%k in ('findstr /e /c:%%~nxi c:\listftp.txt') do (
echo put %%k>>putftp.txt
)
)
::FTP Transfer Fuß
echo bye>>c:\putftp.txt
echo exit>>c:\putftp.txt
Inhalt der Datei putftp.txt:
PASSWORT
cd media
put Media_Datei_1.flv
put Media_Datei_2.flv
put Media_Datei_3.flv
bye
exit
Leider habe ich hier das Problem, dass ich nur die Dateien aufgelistet bekomme, die bereits Vorhanden sind. Die, die ich eigentlich gelistet haben möchte sind nicht dabei. Wo liegt der Fehler? Ist es möglich in die for schleife vor das findstr noch ein if not einzubauen?
Vielen Dank schonmal fürs Lesen ;)
grussascha
Content-ID: 68607
Url: https://administrator.de/contentid/68607
Ausgedruckt am: 19.11.2024 um 15:11 Uhr
Vielleicht vorweg der Hinweis, dass Du im Forum einige Threads zum Thema "Synchronisieren" mit Tipps für entsprechende Software finden solltest ...
Da ich momentan nicht mehr Zeit habe, nur als (ungetesteter) Ansatz: Ersetze den Code für den "FTP Transfer Rumpf" durch
for %%i in ("d:\media\*.*") do findstr /e /c:"%%~nxi" c:\listftp.txt>nul || echo put %%k>>putftp.txt
Grüße
bastla
">nul" hat nur die Aufgabe, die Ausgabe der gefundenen Zeile zu verhindern (wenn Du es weglässt, ändert sich nichts an der übrigen Funktionalität).
Schließlich gibt es noch "&" zum Aneinanderfügen von Befehlen ohne irgendeine Bedingung.
Grüße
bastla