Gibt es eine Möglichkeit, anzuzeigen, wie viel Zeit noch vor einem geplanten Herunterfahren in Windows 7 verbleibt?
Mit geplantem Herunterfahren meine ich ein Herunterfahren (oder Neustarten), das mit der Befehlszeilenanwendung geplant wurde shutdown.exe
, z.
shutdown /t 600 /s
Daraufhin wird ein Meldungsfeld angezeigt, in dem angegeben ist, dass bis zum Herunterfahren noch 10 Minuten und die tatsächliche Systemzeit für das Herunterfahren verbleiben.
Jeder Zeitpunkt, der länger als 600
Sekunden dauert, verwendet stattdessen eine Sprechblasenmeldung.
Ich erinnere mich vage an XP, das einen GUI-Fortschrittsmonitor mit Countdown bereitstellt.
Wie haben sie gearbeitet? Die verbleibende oder geplante Abschaltzeit muss irgendwo gespeichert werden. Wie kann ich darauf zugreifen?
Ich bevorzuge eine Methode über die Befehlszeile (dh keine GUI). Noch wichtiger ist, ist dies unter Windows möglich, dh ohne Programme von Drittanbietern?
Wenn dies mit Standard-Windows-Dienstprogrammen nicht möglich ist (und ich hier an das Gebiet des Stapelüberlaufs grenzt), gibt es eine Windows-API (oder .NET, die sogar in PowerShell verwendet werden kann!)? Beides wäre einem zufälligen Programm eines Drittanbieters vorzuziehen.
/c <time>
) geändert wird.Antworten:
Die Frage war interessant, also habe ich einen Stapel geschrieben , der für Sie arbeiten kann.
Im Grunde ist es ein Countdown-Timer, ich habe keinen
shutdown
Befehl dazu eingefügt, sondern ihn als Hausaufgabe belassen. Berechnungen sind nicht genau, es geht nicht um Schaltjahre, Monatslänge, ... dies dient hauptsächlich der Lesbarkeit, da ich es einfach erlernen wollte.Derzeit arbeiten zwei Dateien zusammen. Eine startet den Timer und die andere gibt beim Aufrufen an, wie viel Zeit seit dem Start des Timers vergangen ist. Diese beiden Dateien können ziemlich einfach zu einem Cmd-Skript kombiniert werden. Auf diese Weise können Sie auch einige Zeilen wiederverwendbar machen ( wie definierte Methoden ).
Okay, schauen wir uns die Skripte an.
Hier ist
StartTimer.cmd
:In Übereinstimmung mit
FOR /F "skip=1 ...
:1. Fragen Sie
wmic
nach der aktuellen Uhrzeit und dem aktuellen Datum.2. Zur ersten Zeile der Ausgabe, die Überschriften ist durch
skip=1
3. Lesen Sie Werte mit
tokens=1-6
Bedeutungs%%a-%%f
durch getrennt Spaceor
TAB.4. Speichern Sie die Werte für Variablen
%DateY%
, ...%TimeH%
,%TimeM%
, ...Danach verwenden
SET /A EPOCH=...
wir beim Zeilenanfang einen Ausdruck, der die verstrichenen Sekunden1.1.1970
berechnet ( dies ist eine einfache ungefähre, keine echte Unix-Zeit. Siehe Google, wenn Sie genaue Informationen benötigen ).Dann
ECHO %EPOCH% > ...
schreibt in der letzten Zeile die berechnete Zeit in die Datei "Timer.start.state
".Und hier
GetTimerValue.cmd
:Hier ist der Codefluss von oben nach unten nicht linear. Zuerst
GOTO CHECKFILE
beschriften wir, damit Ausführungsbefehle wirklich in der Zeile beginnen, in der steht:CHECKFILE
. Viele Dinge hier sind genauso wie bei,StartTimer.cmd
deshalb erkläre ich nur neue oder geänderte Zeilen.Zuerst prüfen wir, ob eine Statusdatei
Timer.start.state
vorhanden ist. Wenn nicht, beenden wir die Nachricht. Wenn der Timer gestartet wurde und Dateien vorhanden sind, fahren wir fort und rechnen nach:1. Springen Sie zu der Stelle,
:TIMEOUT
an der wir die verstrichenen Sekunden ausgegeben haben. Sie können dafür eine bessere Bezeichnung wählen ...2.
SET /P %Timer% ...
Liest die Startzeit aus der Datei und weist der%Timer%
Variablen einen Wert zu .3.
SET /A Elapsed ...
berechnet Sekunden zwischen Startzeit und jetzt.4. gibt
ECHO "Seconds ...
den berechneten Wert wieder (Sekunden seit dem Start des Timers).So erhalten Sie die verbleibende Zeit:
Sie können subtrahieren
%Elapsed%
von%MaxTime%
:OK, genug erklärt. Hier ist das vollständige Skript
Timer.cmd
:Zu diesem Zeitpunkt habe ich alles vergessen, was bereits gesagt wurde. Diese Batch-Datei hier arbeitet alleine, es gibt also keine separate
StartTimer.cmd
oderGetTimerValue.cmd
nur dieseTimer.cmd
. Grundsätzlich ist es immer noch dasselbe, aber der Codefluss ist unterschiedlich und die Verwendung ist auch völlig anders. Dies speichert den Status jedoch nicht in einer Datei, sodass Sie nach dem Abmelden / Neustarten keinen Timer-Wert mehr erhalten können. Wenn Sie dieses Beispiel oben benötigen, um den Status in einer Datei zu speichern / lesen.Verwendung / Hilfe für
Timer.cmd
wird gedruckt, wenn sie ohne Argumente ausgeführt wird. Ich habe dies nicht vollständig getestet und es kann einige Tippfehler usw. geben, Argumente sind nicht narrensicher geprüft.Integrieren mit
shutdown
oder einem anderen Befehl:Datei
poweroff.cmd
:Verwendung:
poweroff <wait_seconds>
um das zeitgesteuerte Herunterfahren zu starten undTimer get
die verstrichene / verbleibende Zeit zu erhalten.quelle
StartTimer.cmd
muss explizit aufgerufen werden. Ich hatte ein kleines Programm geschrieben, um mein Problem zu lösen, das ich veröffentlichen werde, wenn ich wieder auf meinem Computer bin.shutdown.exe
, das aufgerufen wurdeshutdown_original.exe
. Es würde nach dem/t
Flag suchen und, falls vorhanden, eine Datei mit gespeicherten Start- und Endzeiten erstellen. Beim Abrufen der Zeiten (/retrieve
Flag) wird das Ereignisprotokoll überprüft, um festzustellen, ob seit dem Start des Timers ein Start oder ein Abbruch durchgeführt wurde. Ich bin mir nicht sicher, wie es mit Winterschlaf umgegangen wäre. Ich werde den Code oder das Programm nicht veröffentlichen: Es ist ein fehlerhaftes Durcheinander. Und damit das Programm funktioniert, musste ich viel mit Sicherheitseinstellungen herumspielen, die ich nicht fördern möchte.shutdown.exe
Anruf abzufangen und die Zeiten in einer Datei zu protokollieren. Das haben Sie getan und warum ich das akzeptiere.