FTP Kommandos automatisieren
Hi,
ich möchte von einem FTP diverse Dateien auf meinen Lokalen Rechner kopieren. Deshalb habe ich mir folgende Batch geschreiben:
FTP.bat
ftp00.txt
Das funktioniert soweit auch, jedoch bräuchte ich noch eine möglichkeit das jeweil nur die aktuellsten dateien geladenw erden oder das MGET hat nichts überschreibt.
Hat da wer eine Idee?
ich möchte von einem FTP diverse Dateien auf meinen Lokalen Rechner kopieren. Deshalb habe ich mir folgende Batch geschreiben:
FTP.bat
@ECHO OFF
START /MIN /WAIT ftp.exe -n -i -s:ftp00.txt
OPEN Host
USER name PW
Binary
CD "pdf"
LCD "G:\pdf"
MGET "*.pdf"
ASCII
CD "dat"
LCD "G:\dat"
MET "*.dat"
QUIT
Hat da wer eine Idee?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 63987
Url: https://administrator.de/contentid/63987
Ausgedruckt am: 19.11.2024 um 09:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo ooAlbert!
Eine Q&D-Lösung wäre wohl, ein lokales "Temp"-Verzeichnis zu verwenden und von dort die nicht im Zielverzeichnis existierenden Dateien zu verschieben sowie den Rest zu löschen, also zb im ftp-Script
und im Batch dann
Woran erkennt man eigentlich die "aktuellsten" Dateien?
Grüße
bastla
Eine Q&D-Lösung wäre wohl, ein lokales "Temp"-Verzeichnis zu verwenden und von dort die nicht im Zielverzeichnis existierenden Dateien zu verschieben sowie den Rest zu löschen, also zb im ftp-Script
...
LCD G:\ftpTemp\pdf
...
for %%i in (G:\ftpTemp\pdf\*.pdf) do if not exist "G:\pdf\%%~nxi" move "%%i" G:\pdf\
del G:\ftpTemp\pdf\*.pdf
Woran erkennt man eigentlich die "aktuellsten" Dateien?
Grüße
bastla
Hallo ooAlbert!
Etwa so (nach Datum / Uhrzeit):
Wenn Du nach der höchsten fortlaufenden Nummer suchst, statt "/od" ein "/on" (damit wird nach Namen sortiert) verwenden.
Grüße
bastla
Etwa so (nach Datum / Uhrzeit):
@echo off & setlocal
set Letzte=
for /f "delims=" %%i in ('dir /b /od G:\pdf\*.pdf') do set "Letzte=%%i"
if not defined Letzte echo Keine Datei gefunden! & goto :eof
echo %Letzte%
Grüße
bastla
Hallo ooAlbert!
Das Erstellen der "ftp00.txt" mit den entsprechenden dynamischen Inhalten könntest Du mit einer Serie von "echo"-Befehlen durchführen, also etwa:
Beim ersten Mal nur ein Umleitungszeichen (">") verwenden, damit die alte "ftp00.txt" überschrieben wird, ansonsten immer ">>", damit die Zeile an die vorhandene "ftp00.txt" angefügt wird.
Grüße
bastla
kann man eigentlich das "*.pdf" nicht durch eine Variable ersetzen?
Kann man natürlich - allerdings nehme ich an, dass Du damit mehrere Dateitypen abfragen und deren jeweilige Nummer erhöhen willst. Dazu muss sichergestellt sein, dass jede Datei nach dem gleichen Schema benannt ist und der Name also nur aus einer Nummer und dem jeweiligen Dateityp besteht. Wenn dem so ist, sollte das etwa so gehen:@echo off & setlocal
call :GetNext pdf
set "Npdf=%Next%.pdf"
call :GetNext dat
set "Ndat=%Next%.dat"
...
... in ftp00.txt schreiben (siehe unten)
...
START /MIN /WAIT ftp.exe -n -i -s:ftp00.txt
goto :eof
:GetNext
set Next=
for /f "delims=" %%i in ('dir /b /on G:\%1\*.%1') do set "Next=%%~ni"
If defined Next set /a Next+=1 & goto :eof
echo Keine *.%1 gefunden!
set Next=9999999999
goto :eof
Das Erstellen der "ftp00.txt" mit den entsprechenden dynamischen Inhalten könntest Du mit einer Serie von "echo"-Befehlen durchführen, also etwa:
set "ftpScript=G:\ftp00,txt"
echo OPEN Host>"%fptScript%"
echo USER name PW>>"%fptScript%"
echo Binary>>"%fptScript%"
echo CD "pdf">>"%fptScript%"
echo LCD "G:\pdf">>"%fptScript%"
echo MGET "%Npdf%">>"%fptScript%"
...
Grüße
bastla