Frage von Aykut1112, 44

Batch, findet jemand den Fehler?

Findet jemand den Fehler?

Wurde mit Batch geschrieben!


@echo off

shutdown -a

if %errorlevel% == 0 (
    exit
    ) else (
        cls
        color 0C
        title Fehlgeschlagen
        echo Das Herunterfahren des Systems konnte nicht abgebrochen werden, da das System zurzeit nicht heruntergefahren wird.
        echo.
        echo Error: %errorlevel%
    pause >nul
    exit
    )

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von MarkusGenervt, 26

Versuch's mal mit dem hier:

if errorlevel 1 (
cls

pause >nul
exit /b %ERRORLEVEL%
)

Bei dieser speziellen Syntax ist keine Variablen-Kennzeichnung erforderlich.

Hier ist auch kein "errorlevel 0" erforderlich, da dieser Ausdruck das gleiche bedeutet wie:

if %ERRORLEVEL% geq 1 (…

geq = greater or equal

Der Zusatz "exit /b …" besagt, dass die Batch an dieser Stelle beendet wird und der von "shutdown" empfangene ERRORLEVEL außerhalb der Batch an die Befehlszeile zurück gegeben wird.

––––––––––

Allerdings hat dieses Script einen kleinen Haken:

Es arbeitet synchron.

D.h., dass alles nach "shutdown" erst dann weiter verarbeitet werden kann, wenn dieser Befehl beendet wurde. In diesem Fall kommt es auf die Windows-Version an, wie weiter verfahren wird. Dies kann dann u.U. bedeuten, dass der SHUTDOWN-Befehl scheitert, weil immer noch die Batch läuft und einen Handle zum aufgerufenen SHUTDOWN-Befehl offen hält.

Es kann aber auch sein, dass der SHUTDOWN-Befehl alle offenen Prozesse schließt (inkl. dieser Batch) und dann kann ein weiteres Versagen des SHUTDOWN-Befehls nicht mehr durch die Batch abgefangen werden.

Also, ist diese Art des Abfangens des Errorlevels nicht praktikabel oder nur unter bestimmten Bedingungen.

Versuch doch mal diesen hier:

start /WAIT shutdown -a

Ehrlich gesagt, kann ich Dir gerade nicht voraussagen, ob dieser Befehl funktioniert, weil ich damit noch nie experimentiert habe. Aber falls Dein Job mit Batch überhaupt machbar ist, dann nur so.

Ansonsten würde ich empfehlen, es einmal mit VBScript und WMI zu versuchen.

Kommentar von priesterlein ,

Sicher kommt es im Anwendungsfall eines Shutdown gar nicht erst zum Aufruf dieser Batch, die den Shutdown ja abbrechen (-a) soll, denn das System lässt das nicht mehr zu. Aber ob der Frager das meinte, dass er das Problem hat, dass seine Batch nicht mehr gestartet und interpretiert werden kann?

Kommentar von MarkusGenervt ,

Ach herrje, darauf hatte ich gar nicht geachtet (-a).

Ja, was auch immer hier nicht klappt, kann uns nur der User sagen.

Ich habe aber doch gerade nochmal nachgeschaut:

Es könnte auch daran liegen, dass die Syntax komplett falsch ist:
(/a erfordert /m)

shutdown /m [COMPUTERNAME] /a
Kommentar von Aykut1112 ,

Danke probiere ich später mal aus, das seltsame ist, dass es vorhin geklappt hat und jetzt nicht mehr :/

Kommentar von MarkusGenervt ,

Darauf bezog ich mich mit

Also, ist diese Art des Abfangens des Errorlevels nicht praktikabel oder nur unter bestimmten Bedingungen.

Übrigens, wieso überhaupt der "/a"-Schalter?

Der verhindert den Shutdown. Ist das Deine Absicht? Dann wäre ja das ganze Konzept eigentlich sinnlos – zumindest so ganz ohne Kontext.

Antwort
von user6363, 43

Eigentlich sollte es da kein Fehler geben, was spuckt es denn aus? 

Kommentar von Aykut1112 ,

Es zeigt einfach den Text nicht an :/

 Das Herunterfahren des Systems konnte nicht abgebrochen werden, da das System zurzeit nicht heruntergefahren wird.
Kommentar von Aykut1112 ,

Klappt jetzt! :D

Antwort
von triopasi, 44

Was ist denn das Problem? Was geht denn nicht?

Kommentar von Aykut1112 ,

Er zeigt den Text nicht an: 

 Das Herunterfahren des Systems konnte nicht abgebrochen werden, da das System zurzeit nicht heruntergefahren wird.
Kommentar von Aykut1112 ,

Klappt jetzt! :D

Antwort
von priesterlein, 35

Der Fehler ist: "Wurde mit Batch geschrieben".

Keine passende Antwort gefunden?

Fragen Sie die Community