Per Batchscript FTP Server überprüfen ob Online
Hallo erstmal,
ich benötige ein Script, mit dem man überprüft ob eine FTP-Adresse Online ist oder nicht!
Bis jetzt habe folgendes getestet aber keinen Erfolg gehabt,
bzw. Bleibt das Script hängen.
Beginn Script
echo *FTP_TEST* >> C:\iplog.txt
echo Zeitstempel >> C:\iplog.txt
time /t >> C:\iplog.txt
date /t >> C:\iplog.txt
ftp -n xxx.xxx.xxx.xxx >> C:\iplog.txt
if errorlevel goto yes >> C:\iplog.txt
:yes
echo Verbindung erfolgreich! >> C:\iplog.txt
goto ende
:no
echo Fehler! >> C:\iplog.txt
goto ende
:ende
echo *FTP_TEST_Ende* >> C:\iplog.txt
Script Ende
ich benötige ein Script, mit dem man überprüft ob eine FTP-Adresse Online ist oder nicht!
Bis jetzt habe folgendes getestet aber keinen Erfolg gehabt,
bzw. Bleibt das Script hängen.
Beginn Script
echo *FTP_TEST* >> C:\iplog.txt
echo Zeitstempel >> C:\iplog.txt
time /t >> C:\iplog.txt
date /t >> C:\iplog.txt
ftp -n xxx.xxx.xxx.xxx >> C:\iplog.txt
if errorlevel goto yes >> C:\iplog.txt
:yes
echo Verbindung erfolgreich! >> C:\iplog.txt
goto ende
:no
echo Fehler! >> C:\iplog.txt
goto ende
:ende
echo *FTP_TEST_Ende* >> C:\iplog.txt
Script Ende
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 19336
Url: https://administrator.de/contentid/19336
Ausgedruckt am: 20.11.2024 um 06:11 Uhr
8 Kommentare
Neuester Kommentar
Moin zingo,
der Fehler steckt in der Errorlevelauswertung. Lies dazu noch mal unter der Hilfe nach (z.B. mit "IF /?" vom CMD-Prompt).
Beispiel:
FTP.....(whatever)
::Danach IST ein ERRORLEVEL-Wert gesetzt ...
::ERRORLEVEL 0 ...alles prima, Success, OK
::ERRORLEVEL > 0 ....Fehler... und den Fall immer zuerst prüfen!!!
:: Weil: So, wie es implementiert ist vom M$, heißt die z.B. Prüfung "IF %ERRORLEVEL%== 1" übersetzt:
:: "wenn der Errorlevel mindestens 1 oder größer ist..."
::... und Errorlevel ist entsprechend immer 0 oder größer... logisch, kann ja nicht negativ werden
:: if errorlevel goto yes >> C:\iplog.txt ... ungültige Syntax... numerischer Wert für Errorlevel fehlt
richtiger:
if errorlevel 1 goto no
:: ??????????? >> C:\iplog.txt was willst Du denn hier umleiten???????? Die Prüfung??
:yes keinFehler
echo Verbindung erfolgreich! >> C:\iplog.txt
goto ende
:no
echo Fehler! >> C:\iplog.txt
:ende
..
HTH Biber
der Fehler steckt in der Errorlevelauswertung. Lies dazu noch mal unter der Hilfe nach (z.B. mit "IF /?" vom CMD-Prompt).
Beispiel:
FTP.....(whatever)
::Danach IST ein ERRORLEVEL-Wert gesetzt ...
::ERRORLEVEL 0 ...alles prima, Success, OK
::ERRORLEVEL > 0 ....Fehler... und den Fall immer zuerst prüfen!!!
:: Weil: So, wie es implementiert ist vom M$, heißt die z.B. Prüfung "IF %ERRORLEVEL%== 1" übersetzt:
:: "wenn der Errorlevel mindestens 1 oder größer ist..."
::... und Errorlevel ist entsprechend immer 0 oder größer... logisch, kann ja nicht negativ werden
:: if errorlevel goto yes >> C:\iplog.txt ... ungültige Syntax... numerischer Wert für Errorlevel fehlt
richtiger:
if errorlevel 1 goto no
:: ??????????? >> C:\iplog.txt was willst Du denn hier umleiten???????? Die Prüfung??
:yes keinFehler
echo Verbindung erfolgreich! >> C:\iplog.txt
goto ende
:no
echo Fehler! >> C:\iplog.txt
:ende
..
HTH Biber
Na ja, zingo,
Du kannst doch, bevor Du Dich gleich mit dem FTP-Server verbindest, erstmal per Ping prüfen, ob der da ist. Geht doch eh schneller...
..
Set "OnLine=Nein"
call :perform 172.24.3.2
--
goto whereever
:
:Perform
::kein FTP.exe-Aufruf, wenn es den Server nicht gibt/der nicht antwortet
ftp -n %1
IF ERRORLEVEL 1 (call :FTPErrorhandling %1) & goto :eof
set "OnLine=Ja"
goto :eof
...
Dann stellt sich die Frage mit dem "quit" gar nicht.
HTH Biber
Du kannst doch, bevor Du Dich gleich mit dem FTP-Server verbindest, erstmal per Ping prüfen, ob der da ist. Geht doch eh schneller...
..
Set "OnLine=Nein"
call :perform 172.24.3.2
--
goto whereever
:
:Perform
ftp -n %1
IF ERRORLEVEL 1 (call :FTPErrorhandling %1) & goto :eof
set "OnLine=Ja"
goto :eof
...
Dann stellt sich die Frage mit dem "quit" gar nicht.
HTH Biber
Stimmt, zingo,
da hast Du recht.
Dann streich das mit dem Ping und füttere die FTP.Exe mit einer Eingabe-Datei. So wie Du es beim Login ja wahrscheinlich auch machst.
Da, wo in Deiner zweiten Variante (vor meinem Ping-Irrweg) ein
echo quit>%temp%\quit.txt
ftp -s:%temp%\quit.txt -n 172.24.3.2
IF ERRORLEVEL 1 ......
hope that fits better
Biber
da hast Du recht.
Dann streich das mit dem Ping und füttere die FTP.Exe mit einer Eingabe-Datei. So wie Du es beim Login ja wahrscheinlich auch machst.
Da, wo in Deiner zweiten Variante (vor meinem Ping-Irrweg) ein
ftp -n 172.24.3.2 ... steht, schreib statt dessen:
echo quit>%temp%\quit.txt
ftp -s:%temp%\quit.txt -n 172.24.3.2
IF ERRORLEVEL 1 ......
hope that fits better
Biber
Sinnngemäß ja...
Gut:
ftp -s:%temp%\quit.txt -n 172.24.3.2 >> c:\connect.txt
besser:
ftp -s:%temp%\quit.txt -n 172.24.3.2 > c:\connect.txt
(neu schreiben statt anfügen, sonst steht natürlich immer ein "Verbindung" drin früher oder später.)
Gut gemeint:
Besser, weil es funktioniert:
:yes
echo blah
goto :eof
:no
...
:: und die *.log's natürlich nicht auf C:\ packen, sondern nach %temp% oder so..
Hast Glück gehabt, hab deinem Kommentar bewertet vor dem zweiten Hinsehen
Schönen Abend
Biber
Gut:
ftp -s:%temp%\quit.txt -n 172.24.3.2 >> c:\connect.txt
besser:
ftp -s:%temp%\quit.txt -n 172.24.3.2 > c:\connect.txt
(neu schreiben statt anfügen, sonst steht natürlich immer ein "Verbindung" drin früher oder später.)
Gut gemeint:
Besser, weil es funktioniert:
echo blah
goto :eof
:no
...
:: und die *.log's natürlich nicht auf C:\ packen, sondern nach %temp% oder so..
Hast Glück gehabt, hab deinem Kommentar bewertet vor dem zweiten Hinsehen
Schönen Abend
Biber