Batch: Ergebnis aus Befehl abfragen und nutzen. If Errorlevel oder sowas

o0julia0o
Goto Top
hey, ich habe folgenden Befehl in einer batch:

net stop "Radmin VPN Control Service"

Als Antwort erhalte ich:
"Systemfehler 5 aufgetreten.

Zugriff verweigert"

Weil die Datei als Administrator ausgeführt werden muss. Diese Fehlermeldung möchte ich nutn nutzen um in der Batch halt auszugeben:
"Datei als Administrator starten"

Also so etwas wie:
if errorlevel "systemfehler 5 augetreten" goto Admininfo
:Admininfo
echo Datei als Administrator ausführen

Mein Versuch:
echo off
net stop "Radmin VPN Control Service"
if %ERRORLEVEL% == 5 (
set Variable = 1
if Variable == 1 goto Admininfo
:Admininfo
echo Datei als Administrator starten
pause
exit


Wie geht das? Danke!

Content-Key: 530279

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

Ausgedruckt am: 30.06.2022 um 20:06 Uhr

Mitglied: 142232
Lösung 142232 30.12.2019 aktualisiert um 15:50:52 Uhr
Goto Top
Pack das an den Anfang des Batch-Skripts dann erübrigt sich der Hinweis 😉
Damit wird die Batch elevated gestartet sofern sie noch nicht elevated läuft.
Mitglied: LukasD
Lösung LukasD 30.12.2019 um 15:43:32 Uhr
Goto Top
Hi Julia,

ich verwende da meistens eine Abfrage ganz zu beginn des Scripts:

Falls es ohne Admin Rechte gestartet wird färbt sich das Fenster rot und es wird eine Fehlermeldung ausgegeben.
Mitglied: o0Julia0o
o0Julia0o 30.12.2019 aktualisiert um 16:12:25 Uhr
Goto Top
Danke! Aber wie frage ich von einem Befehl der gerade ausgeführt wurde, den Ergebniswert ab? In diesem Fall dieses:

"Systemfehler 5 aufgetreten.

Zugriff verweigert"

So könnte ich bei irgendeinem Fehler die Batch in eine Pause laufen lassen. Und wenn nicht sie direkt beenden lassen.
Mitglied: 142232
Lösung 142232 30.12.2019, aktualisiert am 31.12.2019 um 09:53:39 Uhr
Goto Top
Siehst du doch oben, entweder den errorlevel per if abfragen wie LukasD es macht, oder eben mit den in die Pipe gehängten Operatoren && für Success oder || für failed arbeiten.

Voraussetzung dafür ist natürlich, dass der ausgeführte Befehl einen korrekt gesetzten Errorlevel zurückgibt. Tut er das nicht kann man aber auch das beheben indem man nach bestimmten Ausgabewerten mit einem in der Pipe nachgeschalteten find oder findstr arbeitet welcher dann einen richtigen Errorlevel ausgibt der ausgewertet werden kann.

Einfach mal lesen
https://it-stack.de/26/08/2010/batch-if-errorlevel/
https://sites.google.com/site/batchprogrammierung/befehle/befehle/if
Mitglied: o0Julia0o
o0Julia0o 04.01.2020 aktualisiert um 11:18:57 Uhr
Goto Top
Danke. Funktioniert. Wie frage ich denn einen Errorlevel den der vorherige Befehl ausgibt ab?

Es gibt ja mehr als 2 Errorlevel. Durch testen herausgefunden habe ich, dass:
net stop "Radmin VPN Control Service"

wenn der Prozess bereits gestartet ist Errorlevel 2 ausgibt, wenn man versucht ihn zu beenden. das wäre ja dann für die Erfolgsanzeige auch o.k. Aber alle anderen Errorlevel außer 0 & 2 sind nicht o.k.

So sieht dann mein Code aus(aber wie gesagt, Errorlevel2-Ausgabe nur durch Durchprobieren herausgefunden):