3335 Stimmen

Windows Batch Script: Computer herunterfahren

Tutorial von Stefan Trost | Letztes Update am 24.04.2024 | Erstellt am 03.11.2013

Mit diesem kleinen, nur aus zwei Zeilen bestehenden Batch-Script lässt sich ein Computer mit dem Betriebssystem Windows herunterfahren:

@echo off
%SYSTEMROOT%\system32\shutdown.exe -s -t 0

Um das Script nutzen zu können, erstellt man sich einfach eine neue leere Textdatei, kopiert diese 2 Zeilen hinein und ändert die Dateiendung von "txt" zu "bat".

Wenn man danach doppelt auf diese Datei klickt, wird der Computer automatisch und ohne eine Nachfrage heruntergefahren.

Nützliche Erweiterungen des Scripts

Natürlich können wir das vorgestellte Skript bereits genau so, wie es da steht, nutzen. Dennoch bieten sich je nach Bedarf einige Modifikationen und Erweiterungen an, um noch mehr aus dem Skript herauszuholen. Was möglich ist und wie es funktioniert, möchten wir uns in diesen folgenden Abschnitten ansehen:

Einbettung in andere Skripte

Nutzbar ist dieses Skript zum Beispiel in Verbindung mit längeren Batch-Dateien, in denen viele Aktionen nacheinander durchgeführt werden oder Programme gestartet werden, die eine längere Zeit für ihre Ausführung benötigen.

Soll der Computer nach der Abarbeitung eines solchen Skripts automatisch heruntergefahren werden, reicht es, die zweite Zeile aus dem Beispielcode an das Ende des langen Batch-Scripts als letzte Zeile einzufügen. Damit erspart man sich als Anwender auf das Ende des Scripts vor dem Computer warten zu müssen, da der Computer mit Ausführung dieses Befehls automatisch nach getaner Arbeit beendet wird ohne dass man sich selber darum kümmern müsste.

Computer zeitverzögert herunterfahren

Die 0 beziehungsweise der letzte Parameter in dem Befehl bedeutet, dass das Herunterfahren innerhalb von 0 Sekunden - also sofort und ohne jegliche Zeitverzögerung - ausgeführt wird. Setzen wir hier eine andere Zahl ein, wird unser Computer zeitverzögert heruntergefahren, wie zum Beispiel dieser Aufruf zeigt:

%SYSTEMROOT%\system32\shutdown.exe -s -t 180

Hier übergeben wir "-t 180", womit wir den PC nach 3 Minuten (also 3 x 60 Sekunden nach Aufruf des Befehls) ausschalten. Der Buchstabe "t" steht hier übrigens für "time" (Zeit).

Die Angabe der Zeit muss immer als Ganzzahl in Sekunden erfolgen. Maximal kann ein Wert von 315360000 (10 Jahre) verwendet werden. Lassen wir die Angabe einer Zeit weg (wenn wir also nur "shutdown.exe -s" ohne irgendeine Zeitangabe schreiben), wird per Default ein t-Wert von 30 angenommen, der Computer also nach einer halben Minute heruntergefahren.

Wichtig ist außerdem zu beachten, dass die Zeitdefinition immer in Form eines "Countdowns" erfolgt beziehungsweise verstanden werden sollte und nicht in Form einer absoluten Zeit. Das heißt, wenn wir zum Beispiel um 17:00 Uhr den Befehl gegeben, dass der Computer in einer Stunde (3600 Sekunden) heruntergefahren werden soll, wird der Computer nur dann auch wirklich um 18:00 Uhr heruntergefahren, wenn der Computer die ganze Zeit eingeschaltet geblieben ist. Verabschiedet sich der Computer dagegen in der Zwischenzeit, sagen wir um 17:10 Uhr, in den Stand-by, wird auch der Countdown für die Abschaltung angehalten und erst wieder fortgesetzt, nachdem der Computer wieder eingeschaltet wurde. Dies sollten wir vor allem bei der Definition von längeren Zeiträumen im Hinterkopf behalten.

Computer neu starten

Der Parameter "s", den wir in allen unseren bisherigen Beispielen verwendet haben, steht für das englische Wort "shutdown", also für "herunterfahren". Auch wenn der Programmname "shutdown.exe" es nicht auf Anhieb vermuten lässt, können wir das gleiche Programm jedoch auch dafür verwenden, unseren Computer entweder sofort oder nach einer beliebigen über den Parameter "t" definierten Zeitspanne neu zu starten. Das einzige was wir dafür an unserem bisher kennengelernten Befehl ändern müssen, ist den Parameter "s" durch "r" auszutauschen. Der Buchstabe "r" steht entsprechend für "restart" (Neustart).

%SYSTEMROOT%\system32\shutdown.exe -r -t 0

Mit diesem Aufruf von "shutdown.exe" starten wir unseren Computer sofort nach Aufruf des Befehls neu. Natürlich können wir auch dieses Mal mit einer Zeitverzögerung arbeiten, wie das nächste Beispiel zeigt:

%SYSTEMROOT%\system32\shutdown.exe -r -t 60

Wieder können wir über den Parameter "t" (time) eine beliebige Zeit zwischen 0 und 315360000 Sekunden definieren. Im Beispiel lassen wir den Computer genau nach 60 Sekunden beziehungsweise nach einer Minute neu starten.

Computer in den Ruhezustand oder Energiesparmodus versetzen

Bis jetzt haben wir uns angesehen, mit welchen Kommandozeilenparametern wir unseren Computer entweder herunterfahren oder neu starten können. Windows lässt sich darüber hinaus aber auch in den Ruhezustand oder in den Energiesparmodus versetzen, um einerseits Energie zu sparen jedoch andererseits eine bestehende Sitzung wieder schnell aufnehmen zu können. Auch diese Zustände lassen sich per Skript aktivieren und bieten sich zum Beispiel an, wenn wir nach der Ausführung eines langen Scripts wieder an der gleichen Stelle mit allen geöffneten Programmen und Dateien weitermachen möchten, an der wir aufgehört haben.

Der Parameter für den Ruhezustand ist das "h". Allerdings kann man diesen Parameter leider nicht in der gleichen Weise verwenden, wie wir es uns bisher für "s" (Herunterfahren) sowie für "r" (Neustart) angesehen haben. Darüber hinaus gibt es für den Energiesparmodus gar keinen Shutdown-Parameter, so dass wir für dessen Aktivierung gänzlich anderes vorgehen müssen.

Da die Aktivierung dieser Zustände entsprechend komplizierter sind und innerhalb dieses Tutorials zu viel Platz einnehmen würden, habe ich daher ein eigenes Tutorial über die Aktivierung des Windows-Ruhezustandes sowie des Energiesparmoduses per Skript geschrieben, in dem wir detaillierter als in diesem einen Abschnitt hier darauf eingehen können.

Umgang mit geöffneten Programmen und Dateien

Wenn wir den Befehl dazu geben, unseren Computer automatisch herunter zu fahren, stellt sich zwangsläufig die Frage, was eigentlich passiert, wenn wir zu dem Zeitpunkt des Abschaltens noch Anwendungen oder Dateien geöffnet haben. Die Antwort auf diese Frage hängt einerseits von unserer über den Parameter "t" spezifizierten Zeit ab, andererseits können wir das Verhalten durch die Verwendung des Parameters "f" (den wir bisher noch nicht kennengelernt haben) auch bewusst steuern. Wie das im einzelnen funktioniert, möchten wir uns in diesem Abschnitt ansehen.

Grundsätzlich können in dem Fall einer Abschaltung des Computers zwei verschiedene Dinge passieren: Entweder werden alle Programme ohne Nachfrage automatisch geschlossen und nicht gespeicherte Änderungen an Dateien gehen verloren oder dem Nutzer wird vor dem Herunterfahren oder Neustarten noch die Gelegenheit dazu gegeben, ungespeicherte Dateien zu speichern, indem noch vor dem Herunterfahren eine entsprechende Meldung angezeigt wird, dass noch Programme mit ungespeicherten Änderungen geöffnet sind.

Welcher von diesen beiden Fällen eintritt, hängt von unserem Aufruf ab. Die folgende Tabelle gibt eine Übersicht über die verschiedenen Fälle, die auftreten können:

BefehlAktion
shutdown -sSofortiger Shutdown ohne Nachfrage oder warten
shutdown -s -t 0Nachfrage "Geöffnete Programme" / "Auf Programm warten" / "Ungespeicherte Änderungen"
shutdown -s -t 60Sofortiger Shutdown ohne Nachfrage oder warten
shutdown -s -f -t 0Sofortiger Shutdown ohne Nachfrage oder warten

Verwenden wir shutdown.exe ohne einen weiteren Parameter wie f oder t, erfolgt ein automatisches Herunterfahren ohne eine Nachfrage. Das heißt, in diesem Fall würden ungespeicherte Dateien verloren gehen. Dasselbe gilt, wenn über den Parameter t eine Zeitverzögerung von mindestens einer Sekunde definiert wurde (wenn wir "shutdown -s" ohne eine Angabe von t aufrufen, wird auch eine Zeitverzögerung von 30 Sekunden per Default verwendet; t ist in diesem Fall also auch über 0). Wenn wir dagegen ein sofortiges Herunterfahren ohne eine Zeitverzögerung mit "-t 0" definieren, erfolgt standardmäßig eine Nachfrage bezüglich der ungespeicherten Dateien, so dass im letzten Moment ein Abspeichern noch möglich ist. Wollen wir dies verhindern, können wir zusätzlich den Parameter f (force stop) übergeben. Ist dieser Parameter gesetzt, findet auch mit "-t 0" ein sofortiger Shutdown ohne Nachfrage statt. Für t > 0 ist f automatisch gesetzt und kann nicht deaktiviert werden.

Getestet habe ich diese Aufrufe auf verschiedenen Rechnern mit Windows 11, Windows 10, Windows 7 sowie Windows XP. Windows 11, Windows 10 und Windows 7 verhielten sich in meinen Tests wie beschrieben. Windows XP dagegen hat nur dann Programme mit ungespeicherten Dateien ohne Nachfrage geschlossen, wenn "f" ausdrücklich gesetzt war. Die anderen Systeme nehmen "f" immer implizit an, sobald t größer als 0 ist. Leider kennt shutdown.exe keinen anderen Parameter um dieses Verhalten aufzuheben, um auch im Falle eines zeitverzögerten Herunterfahrens oder Neustarts die Möglichkeit zur Speicherung zu erhalten.

Auch wenn wir für die Beispielaufrufe in der Tabelle immer den Parameter "-s" (Herunterfahren) verwendet haben, verhält sich "-r" (Neustarten) in der gleichen Weise.

Befehl zurücknehmen

Über den Parameter "t" (time) lassen sich sehr lange Wartezeiten bis zum Herunterfahren beziehungsweise bis zum Neustart des Rechners definieren. Wie bereits oben erwähnt, ist eine Zeitverzögerung von bis zu zehn Jahren möglich. Erst nach Ablauf dieser Zeit wird das initiierte Herunterfahren (-s) oder der Neustart (-r) durchgeführt. Was können wir aber tun, wenn wir uns innerhalb dieser möglicherweise jahrelangen Zeitspanne nach dem Vergehen einiger Zeit doch umentscheiden sollten und den Befehl zurücknehmen möchten?

Die Entwickler von "shutdown.exe" haben an genau diesen Fall gedacht und uns dafür den Parameter "a" (abort / abbrechen) geschenkt. Das folgende Beispiel zeigt, wie wir diesen Parameter für einen Abbruch verwenden können:

%SYSTEMROOT%\system32\shutdown.exe -a

Wir müssen entsprechend "shutdown.exe" einfach nur mit dem alleinigen Parameter "a" aufrufen. Damit wird das geplante Herunterfahren beziehungsweise der geplante Neustart wieder gelöscht. Der Parameter "a" funktioniert unabhängig davon, welche dieser beiden Aktionen wir geplant haben.

Natürlich funktioniert dieser Befehl nur dann, wenn er innerhalb der durch "t" definierten Zeitspanne aufgerufen wird und nicht erst danach. Haben wir "shutdown.exe" mit "-t 0" (sofortige Ausführung) aufgerufen, ist es für einen Abbruch immer zu spät. Haben wir das Programm dagegen zum Beispiel mit "-t 60" (60 Sekunden) aufgerufen und setzen wir den Befehl zum Abbrechen nach beispielsweise 30 Sekunden ab, ist es noch nicht zu spät und das automatische Herunterfahren beziehungsweise Neustarten lässt sich noch verhindern.

Befehl ändern

Auch wenn wir die Zeitverzögerung eines bereits geplanten Herunterfahrens ändern möchten, müssen wir zunächst den Befehl "shutdown.exe -a" aufrufen, bevor wir über "shutdown.exe" eine neue Zeit definieren können.

Angenommen wir haben die Zeit für das Herunterfahren auf 180 Sekunden gesetzt und wir möchten diese Zeit nun nachträglich auf nur noch 60 Sekunden herunter setzen. Man könnte nun vielleicht erwarten, dass wir den Befehl einfach durch ein erneutes Setzen einer Zeit überschreiben könnten. Würden wir jedoch die folgende Befehlsabfolge verwenden, würde der zweite Befehl fehlschlagen, da das Herunterfahren bereits auf 180 Sekunden gesetzt ist und die Zeit bereits läuft. Es würde also weiterhin trotz dieses zweiten Aufrufs ein Herunterfahren erst nach 180 Sekunden erfolgen.

%SYSTEMROOT%\system32\shutdown.exe -s -t 180
%SYSTEMROOT%\system32\shutdown.exe -s -t 60

Richtig wäre es dagegen so:

%SYSTEMROOT%\system32\shutdown.exe -s -t 180
%SYSTEMROOT%\system32\shutdown.exe -a
%SYSTEMROOT%\system32\shutdown.exe -s -t 60

Hier definieren wir zunächst wieder eine Zeit von 180 Sekunden für das Herunterfahren. Um diesen Befehl zu löschen, müssen wir jedoch als erstes "shutdown.exe -a" aufrufen, wie wir es uns im letzten Abschnitt angesehen haben. Erst dann können wir eine neue Zeit für das Herunterfahren (hier "shutdown.exe -s -t 60") definieren.

Manueller Neustart

Eine andere Möglichkeit, den Befehl zum Herunterfahren "zurückzunehmen" besteht darin, den Computer manuell herunterzufahren oder neuzustarten bevor der Zeitpunkt für die automatische Aktion erreicht wurde. Sobald wir dies tun, werden alle über shutdown.exe geplanten Systemabschaltungen oder Neustarts automatisch gelöscht.

Benachrichtigung des Nutzers

Wenn wir unserem Computer mit einem der hier vorgestellten Kommandos den Befehl dazu geben, nicht sofort, sondern erst nach einer bestimmten Zeitverzögerung herunter zu fahren oder neu zu starten, läuft der dafür gestartete Countdown nicht einfach nur im Verborgenen ab. Stattdessen werden dem Nutzer während der ablaufenden Zeitspanne verschiedene Meldungen gegeben, die sich je nach Länge der gesetzten Zeitverzögerung und je nach verwendeter Windows-Version unterscheiden können. Generell wird diese Anzeige je aufdringlicher je näher wir dem Zeitpunkt des Herunterfahrens kommen.

  • Bei kurzen Zeiträumen von unter 3 Minuten erscheint sofort ein kleines Dialogfenster, dass das Herunterfahren ankündigt.
  • Bei Zeiträumen zwischen 3 und 10 Minuten gibt es zwei kleine Dialogfenster. Der erste Dialog kündigt das Herunterfahren in X Minuten sofort an, der zweite Dialog erinnert noch einmal 2 Minuten vor dem Herunterfahren daran.
  • Bei Zeitverzögerungen von über 10 Minuten erfolgt dagegen zunächst eine Benachrichtigung über das Herunterfahren im Tray, anschließend eine weitere Warnung 10 Minuten vor dem Herunterfahren und je nach System nochmals 2 Minuten vor dem herunterfahren.

Bei manchen Windows-Versionen hat das letzte Dialogfenster vor dem Herunterfahren in den Tests einen Countdown der verbleibenden Zeit angezeigt, bei anderen Windows-Versionen wurde nur die Zeit angezeigt.

Liste der Parameter

Zuletzt möchten wir zusammenfassend noch alle in diesem Tutorial verwendeten Parameter sowie einige weitere nützliche Parameter in der folgenden Liste gegenüberstellen. Mit einem Klick auf "Details" können Sie zu dem jeweiligen Abschnitt innerhalb dieses Tutorials springen, in dem der betreffende Parameter beschrieben wird und Sie Beispiele für die Verwendung des Parameters finden können.

ParameterBedeutung
-s(shutdown)Fährt den Computer herunter.Details
-r(restart)Startet den Computer neu.Details
-h(hibernation)Versetzt den Computer in den Ruhezustand.Details
-l(logout)Meldet den aktuellen Nutzer ab.
-a(abort)Bricht das Herunterfahren beziehungsweise den Neustart ab.Details
-t x(time)Sorgt dafür, dass das Herunterfahren beziehungsweise der Neustart erst nach x Sekunden durchgeführt wird. Wird dieser Parameter weggelassen, erfolgt die Aktion per Default nach 30 Sekunden. 0 führt zur sofortigen Ausführung, maximal kann ein Wert von 315360000 (10 Jahre) verwendet werden. Kann nicht mit -h verwendet werden.Details
-f(force stop)Mit diesem Parameter erzwingen Sie, dass möglicherweise aktive Anwendungen ohne Vorwarnung geschlossen werden. Ungespeicherte Änderungen an Dateien können damit verloren gehen.Details
-i(interface)Zeigt eine grafische Benutzeroberfläche an, über die Sie den Shutdown händisch konfigurieren können.

Shutdown.exe beherrscht über die in dieser Zusammenstellung gelisteten Parameter hinaus einige weitere Parameter, welche jedoch für die hier beschriebenen Zwecke nicht erforderlich sind. Zum Beispiel lässt sich über den Parameter "c" (comment) ein Kommentar bezüglich des Neustarts oder des Herunterfahrens definieren oder über den Parameter "d" ein Grund für den Neustart oder das Herunterfahren angeben. Wer mehr über diese und die anderen sonstigen Parameter erfahren möchte, kann einfach in der Kommandozeile "shutdown -?" aufrufen. Mit diesem Befehl gibt shutdown.exe eine Liste aller möglichen Parameter direkt in der Befehlszeile aus. Zu beachten ist, dass die zur Verfügung stehenden Parameter je nach verwendeter Windows-Version voneinander abweichen können.

Hintergrundinformationen zum Aufruf

Unser Skript ruft das Programm shutdown.exe auf, das den Herunterfahr-Vorgang beziehungsweise den Neustart von Windows einleitet oder den Computer auch in den Ruhezustand versetzen kann. Dieses Programm befindet sich im Unterverzeichnis "system32" des Windows-Ordners (typischerweise ist dies der Pfad "C:\Windows\System32").

Da der Systemordner jedoch auf jedem Computer einen anderen absoluten Pfad haben kann (je nachdem wo Windows installiert wurde), benutzen wir, statt den genannten absoluten Pfad zu verwenden, stattdessen die Konstante "%SYSTEMROOT%", die uns immer den richtigen Ordner für die jeweilige Systeminstallation, auf der der Befehl ausgeführt wird, zurückgibt. Es wäre schließlich denkbar, dass jemand Windows nicht auf dem Laufwerk C: installiert hat oder sich der Ordner von einer älteren Windows-Version zu zukünftigen Windows-Versionen unterscheidet.

Alternative Schreibweisen

In der Regel findet Windows das Programm "shutdown.exe" aber auch ohne Angabe eines Pfades. Dies ermöglicht es uns, den Befehl (hier zum sofortigen herunterfahren) auf die folgende Zeile abzukürzen:

shutdown -s -t 0

Weiterhin können die Parameter auch mit einem Slash beziehungsweise Schrägstrich statt dem in den Beispielen verwendeten Bindestrich übergeben werden. Damit würde der genannte Befehl folgendermaßen aussehen:

shutdown /s /t 0

Prinzipiell sollten alle genannten Möglichkeiten funktionieren, unabhängig davon ob man den Bindestrich oder den Schrägstrich verwendet und unabhängig davon, ob man den vollständigen Pfad definiert oder nicht. Im Zweifel sollte man den Befehl natürlich vor seinem Produktiveinsatz auf dem jeweiligen Rechner, auf dem das Skript laufen soll, ausprobieren, um sicher zu gehen.

AntwortenPositivNegativDatumStimmen
11 Stimme

Gibt es irgendeine Möglichkeit, shutdown.exe auch auf einem modernen Windows in einer Art aufzurufen, dass trotz einer definierten Zeitverzögerung (also Parameter t > 0) nicht einfach nur automatisch alles geschlossen wird, sondern nachgefragt wird, falls noch ungespeicherte Dateien oder Programme geöffnet sind?
22.04.2024 um 13:47

AntwortenPositiv Negativ
33 Stimmen

Da für eine Nachfrage beziehungsweise für das Verhindern des erzwungenen Schließens von Programmen der Parameter t = 0 sein muss, kannst du dir zum Beispiel folgendermaßen behelfen:

timeout /t 180 /nobreak
shutdown -s -t 0

Hier bleibt der Parameter t auf 0, so dass die Meldung bezüglich noch geöffneter Programme nicht unterdrückt wird. Gleichzeitig haben wir die Zeitverzögerung einfach durch einen timeout von hier 3 Minuten (180 Sekunden) aus dem shutdown-Befehl herausgenommen und vorgeschaltet.
22.04.2024 um 22:15

Positiv Negativ
Antworten
Antworten

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Die Askingbox-Suche

Info | 0 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.