If ERRORLEVEL funktioniert nicht richtig
Hallo zusammen,
ich möchte mir ein Skript bauen, welches bestimmte Windows Dienste erst Stoppt, den Status checkt, sie wieder startet und wieder den Status checkt.
Habe erst mal mit den Checks begonnen
Die Dienste sind aktuell gestartet, und die errorlevel werden in beiden for-Loops korrekt ausgegeben.
Zu Debuggingzwecken habe ich an verschiedenen Stellen errorlevel in die Konsole ausgegeben:
In der ersten for-Loop hätte eigentlich die else-Klausel greifen müssen - tut sie aber nicht.
Mach ich irgendwas bei der Abfrage von errorlevel falsch?
Beste Grüße
Benjamin
ich möchte mir ein Skript bauen, welches bestimmte Windows Dienste erst Stoppt, den Status checkt, sie wieder startet und wieder den Status checkt.
Habe erst mal mit den Checks begonnen
@echo off
setlocal EnableDelayedExpansion
title Restart CRM CTI
:Variables
set log=%~n0.log
:StopServices
echo StopServices
for /f "delims=; tokens=1 skip=1" %%a in (restart_crm_cti_svc_order.ini) do (
set svc_name=%%a
sc query !svc_name! | findstr /i STOPPED >nul
echo ---- %errorlevel% - !svc_name!
if ERRORLEVEL 0 (
echo if %errorlevel% - !svc_name! - STOPPED
) else (
echo else %errorlevel% - !svc_name! - RUNNING
)
)
:StartServices
echo StartServices
for /f "delims=; tokens=2 skip=1" %%a in (restart_crm_cti_svc_order.ini) do (
set svc_name=%%a
sc query !svc_name! | findstr /i RUNNING >nul
echo ---- %errorlevel% - !svc_name!
if ERRORLEVEL 0 (
echo if %errorlevel% - !svc_name! - RUNNING
) else (
echo else %errorlevel% - !svc_name! - STOPPED
)
)
Die Dienste sind aktuell gestartet, und die errorlevel werden in beiden for-Loops korrekt ausgegeben.
Zu Debuggingzwecken habe ich an verschiedenen Stellen errorlevel in die Konsole ausgegeben:
StopServices
---- 0 - CtiProvider
if 0 - CtiProvider - STOPPED
---- 0 - OpenScapeCTI
if 0 - OpenScapeCTI - STOPPED
---- 0 - TapiSrv
if 0 - TapiSrv - STOPPED
StartServices
---- 1 - TapiSrv
if 1 - TapiSrv - RUNNING
---- 1 - OpenScapeCTI
if 1 - OpenScapeCTI - RUNNING
---- 1 - CtiProvider
if 1 - CtiProvider - RUNNING
In der ersten for-Loop hätte eigentlich die else-Klausel greifen müssen - tut sie aber nicht.
Mach ich irgendwas bei der Abfrage von errorlevel falsch?
Beste Grüße
Benjamin
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1414399504
Url: https://administrator.de/contentid/1414399504
Ausgedruckt am: 22.11.2024 um 03:11 Uhr
2 Kommentare
Neuester Kommentar
Zitat von @n0cturne:
Hab noch ein bisschen weiter google bemüht.
Die if-Abfrage des Errorlevels muss folgendermaßen lauten:
if "%errorlevel%" == "0"
Kaum macht mans richtig - schon funktionierts. :D
Hab noch ein bisschen weiter google bemüht.
Die if-Abfrage des Errorlevels muss folgendermaßen lauten:
if "%errorlevel%" == "0"
Kaum macht mans richtig - schon funktionierts. :D
Auch das ist hier leider nicht richtig, denn die IF Abfrage des Errorlevels befindet sich innerhalb eines For-Loops (Klammern) und hier musst du delayed Expansion für Variablen die abgefragt werden nutzen weil du den sc Befehl ja auch innerhalb der Klammern ausführst, also das Errorlevel statt in Prozentzeichen in Ausrufezeichen kapseln!
if "!errorlevel!" == "0"
sc query !svc_name! | findstr /i RUNNING >nul 2>&1 && (
echo success
) || (
echo failed
)