Czy jest jakiś sposób, aby sprawdzić, ile czasu pozostało do zaplanowanego wyłączenia w systemie Windows 7?
Przez zaplanowane zamknięcie rozumiem wyłączenie / ponowne uruchomienie zaplanowane przy użyciu shutdown.exe
aplikacji wiersza poleceń , np .:
shutdown /t 600 /s
Pojawi się okno komunikatu z informacją, że do zamknięcia jest 10 minut, a rzeczywisty czas zamknięcia systemu.
Dowolny czas dłuższy niż 600
sekundy używa wiadomości balonowej.
Niejasno pamiętam XP zapewniający monitor postępu GUI z odliczaniem.
Jak działały? Pozostały czas wyłączenia lub zaplanowany czas musi być gdzieś zapisany, jak mogę uzyskać do niego dostęp?
Moje preferencje to metoda z linii poleceń (tj. Bez GUI). Co ważniejsze, czy można to osiągnąć w systemie Windows, tj. Bez programów innych firm?
Jeśli nie jest to możliwe w przypadku standardowych narzędzi systemu Windows (i tu graniczę z terytorium Przepełnienia stosu), czy istnieje funkcja Windows API (lub .NET, która może być nawet używana w programie PowerShell!)? Albo byłby lepszy niż jakiś losowy program strony trzeciej.
/c <time>
robi to dodawanie komentarza ( ).Odpowiedzi:
Pytanie było interesujące, więc napisałem partię, która może zrobić dla ciebie robotę.
Zasadniczo jest to odliczanie do zera, nie
shutdown
podałem tego polecenia, ale zostawiłem go jako zadanie domowe. Obliczenia nie są dokładne, nie obchodzi ich lata przestępne, długość miesiąca, ... dotyczy to głównie czytelności, ponieważ chciałem ułatwić naukę.Obecnie dwa pliki wykonują zadanie razem, jeden uruchamia stoper, a drugi, gdy jest wywoływany, mówi, ile czasu upłynęło od uruchomienia timera. Te dwa pliki można dość łatwo połączyć w jeden skrypt cmd, dzięki czemu niektóre linie mogą być ponownie używane ( jak zdefiniowane metody ).
Dobra, spójrzmy na skrypty,
Oto
StartTimer.cmd
:Zgodnie z
FOR /F "skip=1 ...
:1. Zapytaj
wmic
o aktualną godzinę i datę.2. Pomiń pierwszy wiersz wyniku, którym są nagłówki, o
skip=1
3. Odczytaj wartości, używając
tokens=1-6
znaczenia%%a-%%f
oddzielonego przez Spaceor
TAB.4. Wartości sklepu do zmiennych
%DateY%
, ...%TimeH%
,%TimeM%
...Następnie na początku linii
SET /A EPOCH=...
używamy wyrażenia, które oblicza upływające sekundy1.1.1970
( jest to prosty przybliżony, a nie rzeczywisty czas uniksowy. Zobacz Google, jeśli potrzebujesz dokładności ).Następnie w ostatniej linii
ECHO %EPOCH% > ...
zapisuje obliczony czas do pliku o nazwie „Timer.start.state
”.A tutaj
GetTimerValue.cmd
:Tutaj przepływ kodu nie jest liniowy od góry do dołu. Najpierw oznaczamy
GOTO CHECKFILE
etykietę, aby komendy wykonania naprawdę zaczynały się od linii, która mówi:CHECKFILE
. Wiele rzeczy tutaj jest tak samo jak z,StartTimer.cmd
więc wyjaśniam tylko nowe lub zmienione linie.Najpierw sprawdzamy, czy plik stanu
Timer.start.state
istnieje, a jeśli nie, to zakończ komunikat wit. Jeśli timer się uruchomił i pliki istnieją, kontynuujemy i wykonujemy matematykę:1. Przejdź do
:TIMEOUT
miejsca, w którym wyprowadzamy upływające sekundy. Możesz wybrać lepszą etykietę do tego ...2.
SET /P %Timer% ...
czyta czas rozpoczęcia z pliku i przypisuje wartość do%Timer%
zmiennej.3.
SET /A Elapsed ...
oblicza sekundy między czasem rozpoczęcia a teraz.4.
ECHO "Seconds ...
generuje echo obliczonej wartości (sekundy od uruchomienia timera.Jak uzyskać pozostały czas:
Możesz odjąć
%Elapsed%
od%MaxTime%
:OK, wystarczająco wyjaśnione. Oto pełny skrypt
Timer.cmd
:W tym momencie zapomniałem o wszystkim, co już powiedziano. Ten plik wsadowy działa tutaj samodzielnie, więc nie ma osobnego
StartTimer.cmd
lubGetTimerValue.cmd
tylko toTimer.cmd
. Zasadniczo jest nadal taki sam, ale przepływ kodu jest inny, a użycie jest również zupełnie inne. Nie powoduje to jednak zapisania stanu do pliku, więc nie można już uzyskać wartości timera po wylogowaniu / ponownym uruchomieniu, jeśli potrzebujesz tego przykładu użycia powyżej, aby zapisać / odczytać stan do / z pliku.Użycie / pomoc dla
Timer.cmd
jest drukowane po uruchomieniu bez argumentów. Nie przetestowałem tego w pełni i mogą występować literówki itp. Argumenty nie są niezawodne.Zintegruj z
shutdown
dowolnym innym poleceniem:Plik
poweroff.cmd
:Zastosowanie:
poweroff <wait_seconds>
do rozpoczęcia czasowego wyłączenia iTimer get
do upływu czasu / pozostałego czasu.źródło
StartTimer.cmd
Musi być jawnie wywołane. Napisałem mały program, aby rozwiązać mój problem, który opublikuję po powrocie na komputer.shutdown.exe
, który wywołałshutdown_original.exe
. Sprawdziłby/t
flagę i gdyby istniał, stworzył plik z zapisanymi godzinami rozpoczęcia i zakończenia. Podczas pobierania czasów (/retrieve
flaga) sprawdzałby dziennik zdarzeń, aby sprawdzić, czy uruchomienie lub przerwanie zostało wykonane od czasu uruchomienia timera. Nie jestem pewien, jak poradziłby sobie z hibernacjami. Nie zamierzam publikować kodu ani programu: to jest błędny bałagan. Aby program działał, musiałem dużo popsuć ustawieniami zabezpieczeń, których nie chcę promować.shutdown.exe
połączenia i rejestrowanie czasu do pliku, co właśnie zrobiłeś i dlaczego to akceptuję.