ooalbert
Goto Top

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
@ECHO OFF
START /MIN /WAIT ftp.exe -n -i -s:ftp00.txt
ftp00.txt
OPEN Host
USER name PW
Binary
CD "pdf"  
LCD "G:\pdf"  
MGET "*.pdf"  

ASCII
CD "dat"  
LCD "G:\dat"  

MET "*.dat"   

QUIT
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?

Content-Key: 63987

Url: https://administrator.de/contentid/63987

Printed on: April 19, 2024 at 09:04 o'clock

Member: bastla
bastla Jul 17, 2007 at 09:48:14 (UTC)
Goto Top
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
...
LCD G:\ftpTemp\pdf
...
und im Batch dann
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
Member: ooAlbert
ooAlbert Jul 17, 2007 at 10:49:21 (UTC)
Goto Top
man erkennt die nur daran, das diese eben noch nicht im zielverzeichnis sind face-smile bzw. haben die allein eine fortlaufende nummer, bsp. 82326199.pdf, 82326200.pdf, ...

außerdem hab ich festgestellt, das jede 50ste Datei mit korrektem namen aber mit 0byte angelegt wird. Diese sind dann natürlich defekt, auf dem server sind sie jedoch fehlerfrei. Muß man da noch irgendwelche puffer anlegen oder sowas?

mal anders gefragt:
kann ich nicht die letze datei im lokalen verzeichnis auslesen lassen und dann nach der auf dem ftp suchen? dann hätte der doch den einsprung punkt.
Member: bastla
bastla Jul 17, 2007 at 11:55:52 (UTC)
Goto Top
Hallo ooAlbert!

Muß man da noch irgendwelche puffer anlegen oder sowas?
Dazu kann ich leider nichts sagen. face-sad

... haben die allein eine fortlaufende nummer ...
Dann könntest Du ja vielleicht das MGET auf zB "8*.pdf" beschränken ...

Grüße
bastla
Member: ooAlbert
ooAlbert Jul 17, 2007 at 12:22:12 (UTC)
Goto Top
hm, wie durchsuch ich denn das lokale verzeichnis um die letze datei darin zu finden? dann bräuchte man ja nur noch die nummer um eins erhöhen und hätte die aktuelle datei. Mget würde ja dann von dort bis zur aller aktuellsten alles rüberschieben und den rest unbehelligt lassen.
Member: bastla
bastla Jul 17, 2007 at 12:43:05 (UTC)
Goto Top
Hallo ooAlbert!

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%
Wenn Du nach der höchsten fortlaufenden Nummer suchst, statt "/od" ein "/on" (damit wird nach Namen sortiert) verwenden.

Grüße
bastla
Member: ooAlbert
ooAlbert Jul 17, 2007 at 13:10:39 (UTC)
Goto Top
er ließt jetzt die richtige datei aus face-smile kann man eigentlich das "*.pdf" nicht durch eine Variable ersetzen? ich habs mit %Datei% und "%Datei%" versucht aber es ging nicht.

achso und nochwas... wie bekomm ich denn die gewonnene datei in die TXT in der die ftp commandos stehen??
Member: bastla
bastla Jul 17, 2007 at 13:42:36 (UTC)
Goto Top
Hallo ooAlbert!

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%"  
...
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
Member: ooAlbert
ooAlbert Jul 17, 2007 at 14:43:27 (UTC)
Goto Top
hm, stimmt das ganze aus der batch in eine txt schreiben face-smile wobei ich dachte das würde man umgehen können. Es klappt zumindestens.

Jetzt muß ich nur noch überlegen wie ich einige zeichen vom dateinamen durch den stern ersetze, sonst macht mget ja keinen sinn face-smile

Das einzige was halt bleibt einige dateien werd ich immer überschreiben müssen, da ich nie genau weiß wieviele neue dazukommen und ich im ftp ja nicht sagen von datei 1111 bis datei 1155. sondern 11* habe das dann bis ende.