WinFuture-Forum.de: Script soll abfragen ob server antwortet - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Script soll abfragen ob server antwortet bei Antwort von Host - goto


#1 Mitglied ist offline   SungZwo 

  • Gruppe: Mitglieder
  • Beiträge: 2
  • Beigetreten: 05. Mai 13
  • Reputation: 0

geschrieben 05. Mai 2013 - 20:04

Grüsst euch Freunde!
Ich habe kurz ein Problem mit einem Script unter Win7. Es funktioniert einfach nicht. Sobald ich nur eine Antwort auf ein Ping zu einem Host erhalte, möchte ich, daß das Script in die Zeile "antwort" springt. Das klappt leider nicht.
ping 192.168.136.100
if %ERRORLEVEL%==1 goto antwort
....
...
...
....
: antwort
echo  Host antwortet auf Ping



Ist sicherlich nur etwas mit der zeile "if %ERRORLEVEL%==1 goto antwort", nur was, daß weiß ich nicht. Meine bescheidenen Fähigkeiten reichen da leider nicht aus.
0

Anzeige



#2 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 05. Mai 2013 - 20:12

ping 192.168.136.100
if ERRORLEVEL 1 goto :antwort

Edit: Willkommen im Forum!

Dieser Beitrag wurde von d4rkn3ss4ev3r bearbeitet: 05. Mai 2013 - 20:12

0

#3 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.902
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 05. Mai 2013 - 20:18

Je nachdem, wo der Host steht und wie zuverlässig die Verbindung ist, kann man auch mit

ping -n <Anzahl Pakete> -w <Timeout in ms>



das Ganze beschleunigen.

Standard für -n ist 4. 1 sollte reichen.
Für -w einfach schauen, wie lange der Host normal braucht. Das dann mit ein bißchen Freiraum für -w verwenden (im lokalen Netz reichen 10ms und weniger).
"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#4 Mitglied ist offline   SungZwo 

  • Gruppe: Mitglieder
  • Beiträge: 2
  • Beigetreten: 05. Mai 13
  • Reputation: 0

geschrieben 06. Mai 2013 - 23:14

@ d4rkn3ss4ev3r
Das hat so leider nicht funktioniert. Die Konsole hat sich dann bei der Zeile immer sofort geschlossen. Blitzschnell. Ich konnte dabei die Fehlermeldung nicht sehen. Ich habe so versucht:

if ERRORLEVEL% 1 goto antwort


Aber dann springt er zur "antwort" wenn der Host antwortet, aber auch wenn keine Antwort vom Host kommt. Er soll aber nur zur "antwort" gehen, wenn eine Antwort auch gekommen ist.

Ich habe alles folgende versucht:
if %ERRORLEVEL% 1 goto antwort
if %ERRORLEVEL% 1 goto :antwort
if %ERRORLEVEL 1 goto antwort
if %ERRORLEVEL 1 goto :antwort
if ERRORLEVEL 1 goto antwort
if ERRORLEVEL 1 goto :antwort
if ERRORLEVEL==1 goto antwort
if %ERRORLEVEL%==1 goto antwort
if %ERRORLEVEL==1 goto antwort
if %ERRORLEVEL%==1 goto :antwort
if %ERRORLEVEL==1 goto :antwort



Das alles funktioniert nicht. Unterschiedliche Fehler, aber es klappt nie.

Edit.
Jetzt habe ich es. Errorlevel ist eben keine Antwort. Also wenn keine Antwort "1" ist, dann muss eine Antwort gleich "0" sein. Jetzt funktioniert es damit:
if %ERRORLEVEL%==0 goto :antwort


Danke für die Hilfestellung.

Dieser Beitrag wurde von SungZwo bearbeitet: 06. Mai 2013 - 23:23

0

#5 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 07. Mai 2013 - 04:54

Möglich das es ohne >nul nicht geht. So gehts aber 100%:

ping 192.168.136.100>nul
if errorlevel 1 goto :antwort

Deine anderen Versuche funktionieren natürlich nicht. % ist immer ein Teil einer Variable.

Jap errorlevel 1 heißt in diesem Fall keine Antwort. Entweder du schreibst dann if not errorlevel 1 oder halt if errorlevel 0
0

#6 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 14.339
  • Beigetreten: 08. April 06
  • Reputation: 888
  • Geschlecht:Männlich
  • Wohnort:Dortmund NRW
  • Interessen:Alles wo irgendwie Strom durchfließt fasziniert mich einfach weswegen ich halt Elektroinstallateur geworden bin :)

geschrieben 08. Mai 2013 - 18:43

Beitrag anzeigenZitat (SungZwo: 06. Mai 2013 - 23:14)

Aber dann springt er zur "antwort" wenn der Host antwortet, aber auch wenn keine Antwort vom Host kommt. Er soll aber nur zur "antwort" gehen, wenn eine Antwort auch gekommen ist.


ist ja auch logisch. Da der "IF" keine weiteren Fälle "bekannt" sind wird der Programmablauf einfach zeile für zeile weiter verarbeitet.

Du musst dem Programm schon einen "sonst mache XYZ" - Wert mitgeben. Dies kann auch ein

:ende
echo upps hier antwortet nix
pause
Exit



sein ;-)

wobei das ":ende" nur der Ordnungshalber dient wenn es direkt hinter dem letzten "IF"-Befehl steht.

Beitrag anzeigenZitat (d4rkn3ss4ev3r: 07. Mai 2013 - 04:54)

Jap errorlevel 1 heißt in diesem Fall keine Antwort. Entweder du schreibst dann if not errorlevel 1 oder halt if errorlevel 0


naja welche Antwort wann - bei Errorleveln habe ich bisweilen noch nie so richtig durchgeblickt.

if ERRORLEVEL% 0 goto antwort
:keineantwort
echo Hier antwortet nix
pause
Exit
:antwort
echo Hier antwortet was
pause
Exit



wäre somit eine Variante.
0

#7 _d4rkn3ss4ev3r_

  • Gruppe: Gäste

geschrieben 08. Mai 2013 - 18:50

Errolevel 1 ist Nein/Falsch/Problem und 0 ist Ja/Ok/keine Fehler
1

#8 Mitglied ist offline   Stefan_der_held 

  • Gruppe: Offizieller Support
  • Beiträge: 14.339
  • Beigetreten: 08. April 06
  • Reputation: 888
  • Geschlecht:Männlich
  • Wohnort:Dortmund NRW
  • Interessen:Alles wo irgendwie Strom durchfließt fasziniert mich einfach weswegen ich halt Elektroinstallateur geworden bin :)

geschrieben 08. Mai 2013 - 18:54

danke für die Info :-) bin nun auch n stück schlauer geworden :-)
0

#9 Mitglied ist offline   AnMa 

  • Gruppe: aktive Mitglieder
  • Beiträge: 43
  • Beigetreten: 01. Mai 13
  • Reputation: 1

geschrieben 29. Mai 2013 - 15:22

Da hänge ich mich doch gleich mit dran :)

Bei meinem Script wird in der Instalations.cmd neben lokalen Pfaden auch die Daten für einen FTP-Zugang (später für wget benötigt) abgefragt.

Mit der ping / Errorlevel abfrage kann ich vorab ja nur klären ob der Server an sich erreichbar ist. Ob alledings der Benutzername und das Passwort stimmt prüfe ich aktuell noch über eine vermutlich sehr unsinnige Weise.

Ich lass das Script verbinden, hole mit "wget" eine Datei Check.bat auf das System. Danach lasse dort die Variable "Check_Ok" mittels call auslesen und überprüfe das dann im Script.

Zum einen stellt sich mir die Frage ob ich den Befehl "call" auch direkt auf eine im Netz stehende Datei (FTP-Zugang) nutzen kann?

Zum anderen ob es einen Möglichkeit den Status "Verbunden" an sich als OK-Bestätigung zu nutzen?

LG
Anna
0

#10 Mitglied ist offline   RalphS 

  • Gruppe: VIP Mitglieder
  • Beiträge: 8.902
  • Beigetreten: 20. Juli 07
  • Reputation: 1.126
  • Geschlecht:Männlich
  • Wohnort:Zuhause
  • Interessen:Ja

geschrieben 29. Mai 2013 - 16:02

CALL kannst Du außer lokal auch von Windows-Freigaben (einschließlich DAV) direkt ausführen.
Also alles, was wie \\SERVER\Freigabe\Pfad\zur\Batchdatei.cmd aussieht oder auf einem Netzlaufwerk steht.

FTP und HTTP geht nicht direkt; das müßtest Du erst runterladen und dann lokal ausführen.

Ich persönlich find im übrigen wget für ftp ziemlich bescheiden. :huh:

Schau mal bei NcFTP durch, da gibt es eine Komponente namens NcFTPget.exe, welche Fehlercodes zurückgibt.

Hier die Homepage.
Und hier die Dokumentation zu ncftpget.

Kann leider mangels paßwortgeschütztem FTP-Zugang grad nicht testen, was da genau für ein Fehler geworfen wird.

Verbunden sein reicht NICHT aus. So sieht der Ablauf in etwa aus:

ftp>OPEN <servername>
#CONNECT: Server antwortet mit Nachricht und Prompt
ftp>USER <username>
# Benutzer okay, Paßwort eingeben /// Benutzer nicht bekannt
ftp> PASS <paßwort>
# Benutzer authentifiziert - Anmeldung abgeschlossen
ftp>

# *** ODER ***
# Falsches Paßwort, trenne Verbindung
ftp>


Nur so als NB: weiß ja nicht, wer da genau zugreifen soll - also wem die Paßwörter gehören: einer bekannten oder einer unbekannten Nutzergruppe -- entsprechend vorsichtig solltest Du ggf. mit selbigen Paßwörtern umgehen.

Dieser Beitrag wurde von RalphS bearbeitet: 29. Mai 2013 - 16:03

"If you give a man a fish he is hungry again in an hour. If you teach him to catch a fish you do him a good turn."-- Anne Isabella Thackeray Ritchie

Eingefügtes Bild
Eingefügtes Bild
0

#11 Mitglied ist offline   AnMa 

  • Gruppe: aktive Mitglieder
  • Beiträge: 43
  • Beigetreten: 01. Mai 13
  • Reputation: 1

geschrieben 29. Mai 2013 - 16:20

OK .. Danke

Also bin ich mit meiner Vorgehensweise nicht so verkehrt gelegen. Wie gesagt ich hole die Datei vom Server, lese sie aus, und lösche sie dann wieder auf dem System. Dachte es gäbe vieleicht eine elegantere Variante um die Daten für drei Variablen immer aktuell von einem FTP-Server zu holen.

NcFTPGet ... liest sich interessant und werde ichmir in einer ruhigen Minute zu Gemüte führen :)



--17:16:20--  ftp://abba:[email protected]:21/check_ok.bat
           => `D:\BeCast DL V 1.0.6\ceck_ok.bat'
Connecting to url.com:21... connected!
Logging in as abba ...
Login incorrect.



Das wird bei fehlerhaften Logindaten ausgegeben, egal ob Benutzername oder Passwort.
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0