Freitag, 29. März 2019

Ping mit Beep via Batch


Batch ist tot? Bei mir nicht. Ich mache viel damit:

  • Laufwerke in Abhängigkeit des Standortes verbinden
  • Funktionen je nach Verfügbarkeit bereitstellen

oder eben

  • warnen, wenn die VPN ausfällt


Bei uns ist das so, dass die Standorte via VPN gegenseitig verfügbar sein sollen und uns die Jungs von der "IT" einen Router hingestellt haben, der das zwar tut, aber alle Nase lang neu gestartet werden muss. Mich nervt das, weil mich der Internetausfall durch den Routerneustart regelmäßig unvorbereitet trifft.

Wie schön wäre es doch, wenn ich mich selbst wenigstens vorwarnen könne?

Kann ich - mach ich - mit Batch.

Beep mit Batch

Schwierigkeit 1 ist, dass es eine BEEP.EXE o.ä. nicht mehr gibt. Die könnte man zwar aus WinXP extrahieren, aber wer will das schon. Also mit Boardmitteln:

Leider muss man hier ein wenig tricksen, weil wir ein nichtdruckbares Zeichen benutzen wollen, welches wir nicht so ohne weiteres eingeben können. Aber so geht's:

cmd öffnen, dann nacheinander folgende Befehle eingeben und jeweils mit der ENTER-Taste abschließen:


1
2
3
copy con beep.bat
echo ^G
^Z

(Das ^G erhaltet ihr, indem ihr die Tasten [Strg + G] drückt.)

Jetzt haben wir schon mal eine BEEP.BAT, die Windows dazu veranlasst, dass ein Standardton ausgegeben wird.

Schön und funktional

Der Eintrag in der BEEP.BAT sieht richtigerweise so aus:



Den Eintrag kopieren wir in eine funktionale BATCH:


:Start
@echo off
rem Ping-Test mit Warnton auf Verfuegbarkeit der VPN 

set ipziel=192.168.168.168
set Minute=%time:~4,1%

cls
echo.
echo.
echo.
echo.
echo.
echo.
echo ---------------------------------------
echo.
echo       Es ist:
echo.
echo                %time:~0,8%
echo.
echo ---------------------------------------
ping -n 1 localhost > NUL

:Ping
ping %ipziel% -n 2 -w 1000 -l 128|findstr "berschreitung"
if %errorlevel%==0 goto Fehler
if %Minute% == 0 goto Bild
goto Start

:Fehler
echo. 
echo. 
echo !!!! Achtung: die VPN ist offline !!!!
echo  
timeout 2 >> NUL
echo Die IP: %ipziel% ist nicht erreichbar!
echo  
timeout 2 >> NUL
echo  
timeout 20 >> NUL
goto Start

:Bild
for /L %%A IN (1,1,14) DO call PingPong_PIC.bat
cls
goto Start

:Ende

Zur Erläuterung:

set ipziel=192.168.200.158
hier wird eine Variable mit der Ziel-IP deklariert

set Minute=%time:~4,1%
hier wird eine Variable deklariert, die die 5. Stelle (es beginnt mit "0") der Uhrzeit auswirft. Das benutzen wir später, um die Anzeige etwas aufzulockern

echo   %time:~0,8%
wirft die aktuelle Uhrzeit aus, aber nur von der 0. Stelle und davon 8 Zeichen

ping -n 1 localhost > NUL
ist nur davor da, dass die Anzeige einen Augenblick sichtbar ist

ping %ipziel% -n 2 -w 1000 -l 128|findstr "berschreitung"
das ist der eigentliche PING-Befehl: zwei Pakete mit 1 KB, einer Antwortdauer von 128 ms
hinter dem Pipe wird der Output auf die Zeichenfolge "berschreitung" geprüft. Das nutzen wir, um einen Errorlevel zu bekommen (0 = erfolgreich), und dadurch den Fehler des Pings  von dessen Erfolg unterscheiden zu können.

if %errorlevel%==0 goto Fehler
wenn also in der Rückgabe des Pings die Zeichenkette "berschreitung" gefunden wird, ist der Errorlevel erfolgreich und das Programm springt zur Sprungmarke ":Fehler"

if %Minute% == 0 goto Bild
wenn Errorlevel nicht 0 (also 1) ist, dann ist alles in Ordnung. Hier prüfen wir ab, ob die Minute eine Zehner-Minute ist (10 oder 20 oder 30 oder ...). Wenn ja, dann springe zur Sprungmarke ":Bild".

echo BEL
timeout 2 >> NUL
in der Sektion ":Fehler" wird nun das o.a. BEEP ausgegeben. Damit es auch hörbar ist, ergänzen wir es um einen timeout-Befehl.

Übrigens nutze ich für die Anzeige von Quellcode http://hilite.me/. Leider kann hilite.me mit nichtdruckbaren Zeichen nicht umgehen und zeigt nur ein " " an...

for /L %%A IN (1,1,14) DO call PingPong_PIC.bat
in der Sektion ":Bild" rufen wir eine PINGPONG_PIC.BAT auf, die wiederum nichts anderes tut, als ein ASCII-Art anzuzeigen. Bei mit sind das eine Abfolge von Bildern, die insgesamt eine ASCII-Animation ergeben. Das beschäftigt den Prozessor witzigerweise enorm, sodass ich ihm diesen Auslauf nur aller 10 Minuten gönne (siehe die Bedingung mit der Variable %Minute%).

goto Start
Tja und die verteilten Sprungmarken zurück verhelfen uns, dass wir immer wieder von vorn beginnen können.

Keine Kommentare:

Kommentar veröffentlichen

Farbe ist das neue Schwarz

Das gute alte Batch - sie funktioniert und tut, aber leider ist sie so schwarz und unschön. Dabei gibt es von (nahezu) Anfang an die Möglich...