jlxschaf
Goto Top

Batchskript stürzt nach einigen Sekunden ab

Hi,
mit meinem Skript habe ich versucht eine Verbindung zu einem Gerät zu überwachen. Falls die Verbindung einmal abbricht, soll noch 30 mal versucht werden eine erfolgreiche Verbindung herzustellen bevor das Programm dann beendet werden soll. Falls er es schafft eine erfolgreiche Verbindung wiederherzustellen soll er einfach in die Hauptschleife wieder zurück kehren.
Mein Problem besteht darin, dass nachdem ich die Datei ausführe und die IP eingebe, dass das Programm nach ca 1-10 mal (das variiert immer) sich einfach selber beendet.

Vielen Dank im Voraus face-smile

Batchskript:
@echo off
:start
set /p ip="Bitte IP hier eingeben:"
echo Ziel-IP-Adresse: %ip% > Report.txt
echo. >> Report.txt
echo Startzeitpunkt: %date% - %time% >> Report.txt
echo. >> Report.txt
goto schleife

:schleife
ping /n 1 %ip% | findstr /r /c:"[0-9] *ms" >> Report.txt
echo Uhrzeit: %time% >> Report.txt
echo, >> Report.txt
echo am Pingen
if %errorlevel%==1 goto pingerror

timeout /t 1 /nobreak > nul
goto schleife


:pingerror
echo, >> Report.txt
echo, >> Report.txt
echo ! Nicht erreichbar ! >> Report.txt
echo, >> Report.txt
echo IP-Adresse: %ip% >> Report.txt
echo Datum: %date% >> Report.txt
echo Uhrzeit: %time% >> Report.txt
echo, >> Report.txt
echo -------------------------------------------------------------- >> Report.txt
echo -------------------------------------------------------------- >> Report.txt
echo -------------------------------------------------------------- >> Report.txt
goto erneutpingen

:erneutpingen
echo Erneuter Pingversuch Nr.%versuche% >> Report.txt
ping /n 1 %ip% >> Report.txt
echo Uhrzeit: %time% >> Report.txt
echo --- >> Report.txt
echo, >> Report.txt
echo, >> Report.txt
if %errorlevel%==0 goto variablenreset
if %versuche%==30 goto programmende
set /a "versuche+=1"
goto erneutpingen

:programmende
echo Endzeitpunkt: %date% - %time% >> Report.txt
echo Programm zuende

:variablenreset
set /a "versuche=1"
goto schleife

Content-ID: 593313

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

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

JLXSchaf
JLXSchaf 04.08.2020 um 11:08:27 Uhr
Goto Top
hab gerade noch gesehen, dass ich die %versuche% variable zu spät deklariert habe. Hab das noch kurz geändert.
Mein Problem besteht leider immernoch
BadBatchCoder
Lösung BadBatchCoder 04.08.2020 aktualisiert um 11:14:20 Uhr
Goto Top
Habe jetzt keinen eindeutigen Fehler gefunden, weil ich nicht genau weis was du mit dem Script anstellen willst, aber du könntest mal das @echo off weglassen und vor dem Ende jeder Schleife ein pause hinzufügen. Der neue Code würde dann so aussehen:
:start
set /p ip="Bitte IP hier eingeben:"  
echo Ziel-IP-Adresse: %ip% > Report.txt
echo. >> Report.txt
echo Startzeitpunkt: %date% - %time% >> Report.txt
echo. >> Report.txt
pause
goto schleife

:schleife
ping /n 1 %ip% | findstr /r /c:"[0-9] *ms" >> Report.txt  
echo Uhrzeit: %time% >> Report.txt
echo, >> Report.txt
echo am Pingen
if %errorlevel%==1 goto pingerror

timeout /t 1 /nobreak > nul
pause
goto schleife


:pingerror
echo, >> Report.txt
echo, >> Report.txt
echo ! Nicht erreichbar ! >> Report.txt
echo, >> Report.txt
echo IP-Adresse: %ip% >> Report.txt
echo Datum: %date% >> Report.txt
echo Uhrzeit: %time% >> Report.txt
echo, >> Report.txt
echo -------------------------------------------------------------- >> Report.txt
echo -------------------------------------------------------------- >> Report.txt
echo -------------------------------------------------------------- >> Report.txt
pause
goto erneutpingen

:erneutpingen
echo Erneuter Pingversuch Nr.%versuche% >> Report.txt
ping /n 1 %ip% >> Report.txt
echo Uhrzeit: %time% >> Report.txt
echo --- >> Report.txt
echo, >> Report.txt
echo, >> Report.txt
if %errorlevel%==0 goto variablenreset
if %versuche%==30 goto programmende
set /a "versuche+=1"  
pause
goto erneutpingen

:programmende
echo Endzeitpunkt: %date% - %time% >> Report.txt
echo Programm zuende

:variablenreset
set /a "versuche=1"  
pause
goto schleife

Dadurch ist es einfacher den Fehler zu finden.
LG BatchCoder
SlainteMhath
Lösung SlainteMhath 04.08.2020 um 11:32:32 Uhr
Goto Top
Moin,

@batchcoder: danke für die CODE Tags, hatte der TO ja leider nicht hinbekommen...

Dann:
1. Die Zeilen 8 und 35 können raus,
2. den errorlevel würde ich immer direkt nach dem ping abfragen
3. in Zeile 53 gehört noch ein GOTO :EOF rein, sonst springt er nach :Schleife

lg,
Slainte
JLXSchaf
JLXSchaf 05.08.2020 um 08:03:42 Uhr
Goto Top
Vielen Dank für die Hilfe. Hab eure Ratschläge befolgt und hab dann schlussendlich auch den Fehlern gefunden.
"17 timeout /t 1 /nobreak > nul" hatte irgendwie das Programm zum stottern gebracht. Ich hab die Zeile raus genommen, aber weil ich ja dennoch die Pause dort haben will, habe ich stattdessen einfach das Programm einmal den lokalhost anpingen lassen: " ping /n 1 localhost > NUL ".