Jump to content

Batch-Datei zum Überprüfen von IP's und ggf. Umschaltung zu anderer "Website"


Direkt zur Lösung Gelöst von winmadness,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,

 

ich bin doch etwas neu im Erstellen von BATCH-Dateien unter Windows und habe ein kleines Problem....

 

Generell zu meiner Aufgabenstellung:

Ich habe zwei SPS'n, die über ihre IP-Adresse für mich im VPN erreichbar sind. Hier läuft eine kleine Visualisierung. 

Die SPS'n sind redundant aufgebaut, sodass es immer einen Master und einen Slave gibt. Beim Start meiner Visualisierung gibt es eine Startseite. Diese Seite überprüft dann, wer Master und wer Slave ist und schaltet auf die Korrekte Seite um. Danach steuert sich das System selber. 

Leider funktioniert das nur, so lange die Applikation bzw. die SPS selbst läuft.

Deshalb möchte ich nun feststellen, ob nun die eine oder andere IP-Adresse nicht erreichbar ist und auf die Startseite umschalten. Diese überprüft dann wieder alles. 

Zusätzlich möchte ich überprüfen, wie der aktuelle Applikationsstatus ist. Dies kann über Abfrage einer Textdatei realisiert werden.

 

Generell hat das Umschalten schon mal funktioniert... ich hab dann das mit dem überprüfen des Applikationsstatus noch mit dazu gemacht, seit dem Arbeitet die Batch nicht mer ganz durch und bricht irgendwo ab... könnt Ihr mir helfen den Fehler zu finden?

 

@echo off
Title ping check
set ipnetz=192.168.1
set serverip1=150
set serverip2=151
set interval=10
set ip1error=0
set ip2error=0

:Pinginterval

for /F %%I in ('curl http://%ipnetz%.%serverip1%:8080/webserver-state.txt') do (set state1=%%I)
    echo %state1%
pause
if "%state1%" == "AppState=2" (
	if not %ip1error%==1(
		GOTO Error1
		)
	)
if "%state1%" == "AppState=1" (
	set ip1error=0
	)

for /F %%I in ('curl http://%ipnetz%.%serverip2%:8080/webserver-state.txt') do (set state2=%%I)
    echo %state2%
if "%state2%" == "AppState=2" (
	if not %ip2error%==1(
		GOTO Error2
		)
	)
if "%state2%" == "AppState=1" (
	set ip2error=0
	)

ping %ipnetz%.%serverip1% -n 2 -w 1000 -l 2000
if %errorlevel%==1 if not %ip1error%==1 (
	:Error1
	set ip1error=1
	taskkill /f /t /im chrome.exe
	start C:\Programmier\chrome-win\chrome.exe "file:///C:/Users/ortc/Desktop/Test/WebVisuR2.html"
	) 
ping %ipnetz%.%serverip1% -n 2 -w 1000 -l 2000
If %errorlevel%==0 (
	set ip1error=0
	echo "error1level0
	)
echo Error of ip 1 = %ip1error%


ping %ipnetz%.%serverip2% -n 2 -w 1000 -l 2000
if %errorlevel%==1 if not %ip2error%==1 (
	:Error2
	set ip2error=1
	taskkill /f /t /im chrome.exe
	start C:\Programmier\chrome-win\chrome.exe "file:///C:/Users/ortc/Desktop/Test/WebVisuR2.html"
	)
ping %ipnetz%.%serverip2% -n 2 -w 1000 -l 2000
If %errorlevel%==0 (
	set ip2error=0
	echo "error2level0"
	)
echo Error of ip 2 = %ip2error%
timeout %interval%

 

Wäre dankbar für Hilfe!

 

Gruß Chris

Link zu diesem Kommentar
vor 2 Minuten schrieb NilsK:

Moin,

 

dazu müsstest du deine Fehlerbeschreibung konkreter fassen. "Bricht irgendwo ab" ist doch arg unscharf.

 

Gruß, Nils

Moin,

 

du hast natürlich recht! 

Es läuft bis zum ersten "pause" im Programm durch. Danach schließt sich die Batch und das wars...

 

In der Variable "State1" steht auch korrekt "AppState=1" drin. 

image.png.c0b70f886043a42d5d51b2959bfd2a5e.png

 

Ich vermute es hat irgendwas mit diesen IF's hier zu tun:

 

if "%state1%" == "AppState=2" (
	if not %ip1error%==1(
		GOTO Error1
		)
	)
if "%state1%" == "AppState=1" (
	set ip1error=0
	)

 

vor 2 Minuten schrieb NilsK:

 

 

Link zu diesem Kommentar

Moin,

 

dem fehlerhaften Verhalten nach würde ich annehmen: nein.

Diese Beschreibung zeigt auch, dass GOTO und die Labels sehr hakelig implementiert sind:

https://ss64.com/nt/goto.html

Ich würde also davon ausgehen, dass da dein Problem mit dem Abbruch liegt.

 

Spätestens sobald du es mit "etwas" komplexerer Logik zu tun hast, würde ich dir von Batch abraten. Die PowerShell leistet da üblicherweise erheblich bessere Dienste-

 

Gruß, Nils

 

Link zu diesem Kommentar

Hi,

 

also ich hab mal die Error-Jumps raus genommen... keine Änderung des Problems

 

Ich hab auch mal noch ne Pause vorher eingefügt. Auch keine Änderung... es sollte also an der IF-Abfrage liegen vermute ich

Mache ich die IF-Abfrage raus, läuft die Batch. (Nur halt ohne die Logik, die in der IF drin ist).... Ich seh einfach den Fehler nicht...

 

@echo off
Title ping check
set ipnetz=192.168.1
set serverip1=150
set serverip2=151
set interval=10
set ip1error=0
set ip2error=0

:Pinginterval

for /F %%I in ('curl http://%ipnetz%.%serverip1%:8080/webserver-state.txt') do (set state1=%%I)
    echo %state1%
pause
if "%state1%" == "AppState=2" (
    pause
	if not %ip1error%==1(
		GOTO Error1
		)
	)
if "%state1%" == "AppState=1" (
    pause
	set ip1error=0
	)

for /F %%I in ('curl http://%ipnetz%.%serverip2%:8080/webserver-state.txt') do (set state2=%%I)
    echo %state2%
if "%state2%" == "AppState=2" (
	if not %ip2error%==1(
		GOTO Error2
		)
	)
if "%state2%" == "AppState=1" (
	set ip2error=0
	)

ping %ipnetz%.%serverip1% -n 2 -w 1000 -l 2000
if %errorlevel%==1 if not %ip1error%==1 (
	:Error1
	set ip1error=1
	taskkill /f /t /im chrome.exe
	start C:\Programmier\chrome-win\chrome.exe "file:///C:/Users/ortc/Desktop/Test/WebVisuR2.html"
	) 
ping %ipnetz%.%serverip1% -n 2 -w 1000 -l 2000
If %errorlevel%==0 (
	set ip1error=0
	echo "error1level0
	)
echo Error of ip 1 = %ip1error%


ping %ipnetz%.%serverip2% -n 2 -w 1000 -l 2000
if %errorlevel%==1 if not %ip2error%==1 (
	:Error2
	set ip2error=1
	taskkill /f /t /im chrome.exe
	start C:\Programmier\chrome-win\chrome.exe "file:///C:/Users/ortc/Desktop/Test/WebVisuR2.html"
	)
ping %ipnetz%.%serverip2% -n 2 -w 1000 -l 2000
If %errorlevel%==0 (
	set ip2error=0
	echo "error2level0"
	)
echo Error of ip 2 = %ip2error%
timeout %interval%


GOTO Pinginterval

 

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...