dbreuer
Goto Top

FTP Verbindung prüfen per Batch

Hallo,
ich habe ein kleines Problem und hoffe ihr könnt mir helfen.

Ich möchte Dateien per Batch Datei übertragen und danach automatisch löschen.
Wenn aber die FTP Verbindung nicht zustande kommt werden die Dateien trotzdem gelöscht.
Nun brauche ich eine Abfrage, ob die FTP Verbindung erfolgreich war und erst danach sollen die Dateien übertragen werden.
Wenn die Verbindung nicht erfolgreich war soll die Batch einfach beendet werden.

Hier kommt mein Code:

ftp -s:c:\FTP\TEST\ftp.txt test.de
echo %errorlevel%
IF %ERRORLEVEL% EQU 0 goto start
IF %ERRORLEVEL% GRT 0 goto end
:start
echo erfolgreich
goto quit
:end
echo fehler
:quit

In der ftp.txt stehen die Zugangsdaten für den FTP Server drin.
Die FTP Verbindung wird auch erfolgreich ausgeführt.
Aber egal ob den Netzwerkstecker ziehe (simuliert Serverausfall) oder ob es erfolgreich ist, es wird immer der Errorlevel 0 ausgegeben?

Habe auch schon viel gegoogelt und hier im Forum den Tipp mit den Errorleveln gefunden, aber komme jetzt einfach nicht mehr weiter.

Ich hoffe ihr könnt mir helfen.

Dankeschön!

LIebe Grüße
David

Content-Key: 159676

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

Printed on: April 23, 2024 at 16:04 o'clock

Member: Skyemugen
Skyemugen Jan 28, 2011 at 14:43:11 (UTC)
Goto Top
Aloha,

als erstes wäre eine Formatierung schön für's Auge ;) - als zweites (ohne mich jetzt in den Errorlevel hinein zu denken - ich mag damit nicht arbeiten) könntest du ja die ftp Anmeldung laufen lassen und dann per if exist eine bestimmte file suchen, wenn die gefunden wird, ist die Verbindung aktiv, wenn nicht - dann nicht.

greetz André
Member: miniversum
miniversum Jan 28, 2011 at 15:34:17 (UTC)
Goto Top
IF %ERRORLEVEL% GRT 0 goto end
Funktioniert nicht. GTR heist größer:
EQU - gleich
NEQ - nicht gleich
LSS - kleiner als
LEQ - kleiner als oder gleich
GTR - größer als
GEQ - größer als oder gleich
Mitglied: 60730
60730 Jan 28, 2011 at 18:45:56 (UTC)
Goto Top
moin,

ftp -s:c:\FTP\TEST\ftp.txt test.de
echo %errorlevel% 

bedeutet im Klartext - rufe ftp.exe mit Parameter -s:c:\FTP\TEST\ftp.txt test.de auf.
Ergo nur wenn
  • ftp.exe
  • die Domain Test.de
  • oder die textdatei nicht gefunden wird, kommt ein anderer Errorlevel als 0 zurück.

Du mußt, wenn schon das Feedback von der FTP Session auslesen.
ftp  -s:c:\FTP\TEST\ftp.txt>c:\FTP\TEST\ftpcheck.log
find "200 Type set to I" c:\FTP\TEST\ftpcheck.log && goto ok  

echo error
pause
:ok
Und die dazugehörige .txt
open adresse
User
password
bin

Der Befehl "Bin" sorgt für das gesuchte 200 Type set to I und das gibt der FTP nicht zurück, wenn er hängt bzw. sollte man ja eh via bin übertragen.
Und man kann das noch ganz anders zimmern, aber so mache ich das.
Lass das einfach zweimal laufen und werte den Unterschied zwischen einer erfolgreichen und einer Übertragung mit Fehler aus.

Gruß
Member: -WeBu-
-WeBu- Jun 03, 2011 at 18:02:16 (UTC)
Goto Top
Ich hole diesen alten thread hoch, weil ich hier endlich die ersehnte Antwort von TimoBeil gelesen habe, daß ftp.exe einfach während einer fehlerhaften Übertragung innerhalb der Befehle von ftp.txt kein errorlevel ungleich 0 setzt.

Die Abfrage, ob der bin-Befehl gutging ("200 Type set to I"), ist ganz ok, aber ob dann auch die Übertragung gutging, weiß man nicht. Besser ist da die Abfrage auf "226 Transfer complete. Closing data connection." Für EINE Datei geht das, für mehrere nicht.

Aber, vielleicht könnte man überlegen, ob man eine komplette Übertragung per ftp.exe auch OHNE -s:ftp.txt hinbekommt. Wenn man einfach ALLES irgendwie auf eine Kommandozeile packt, also servername, user, passwort, local-file, server-file und wenn dann dabei irgendwas(!) schiefgeht, hat man (vielleicht) einen errorlevel, oder?

Wie aber bekommt man alles in einen ftp.exe-Aufruf?
Mitglied: 60730
60730 Jun 03, 2011 at 19:02:46 (UTC)
Goto Top
moin,

ganz einfach...
  • garnicht - oder besser/genauer (ich wüßte aus dem Stehgreif nicht wie)
...sondern anders.

  • bau dir ein Grundgerüst
User
password
bin
kopiere dieses Grundgerüst in einer Schleife zu einer temp. Datei
füge während der Schleife
cd ordner
put xyz.suffix
get abc.suffix
dazu und ein abschliessendes
quit
und schicke jede einzelne Datei / Ordner einzeln auf den FTP Server
  • oder suche nach "error /timeout"usw. in der "logdatei"
Nur weißt du dann wirklich nicht, wo es klemmt.

gruß
Am Montag bin ich wieder in der Windowswelt, vielleicht fällt mir ja doch noch was anderes ein.
Member: -WeBu-
-WeBu- Jun 03, 2011 at 19:15:09 (UTC)
Goto Top
Argh, das ist Aufwand.

Für meine eine Datei(!!) habe ich jetzt, wie erwähnt, deinen vorherigen Vorschlag abgewandelt und frage das ftpcheck.log genau auf das Vorhandensein von dem string "226 Transfer complete. Closing data connection." ab. Geht was schief, dann kommt dieser String nicht und ich lass mir per notepad sofort das log vorlegen, denn ich muss beim Übertragen einfach SOFORT wissen, ob alles geklappt hat und nicht erst einen Morgen später (per server-log-check o. ä.)

Bei der Gelegenheit habe ich einen bug bei strato festgestellt. Um auf Fehler zu checken, habe ich bei meinen Versuchen ans korrekte Passwort weitere Zeichen angehängt, ABER KEINEN FEHLER BEKOMMEN! face-sad Ein Strato-Server prüft offensichtlich zeichenweise und wenn genügend richtige Zeichen "da" sind, isser glücklich! Ich glaub das einfach nicht und ich wußte das auch nicht. Ist das bekannt?