Como posso determinar se e quando um desligamento está atualmente pendente ou agendado, sem abortá-lo?
Eu não acho que é possível determinar quando o desligamento acontecerá.
Você pode determinar se um desligamento estiver agendado usando o seguinte algoritmo:
-
Execute um encerramento de "teste" usando
shutdown /t xxx
com um valor grande para o tempo .- Para o Windows 7 ou posterior, o tempo máximo permitido foi aumentado de 600 segundos para 315,360,000 segundos (10 anos)
-
Se já houver um desligamento pendente, então
shutdown /t xxx
falhará com errorlevel1190
:A system shutdown has already been scheduled.(1190)
-
Se você não receber o erro acima, saberá que não houve nenhum encerramento anterior agendado, portanto, será necessário excluir o desligamento de "teste" usando
shutdown /a
.
O acima pode ser feito em um arquivo em lotes:
@echo off
rem perform a "test" shutdown with a large time
shutdown /t 999999
rem if there is already a shutdown pending then %ERRORLEVEL% will be 1190
if %ERRORLEVEL% equ 1190 (
echo A shutdown is pending
) else (
rem cancel the "test" shutdown
shutdown /a
echo No shutdown is pending
)
Nota:
- Eu não testei o arquivo de lote acima porque não desejo desligar meu PC neste momento.
Leitura Adicional
- Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
- Errorlevel - Quase todos os aplicativos e utilitários definem um código de saída quando concluem / terminam.
- if - Realize condicionalmente um comando.
- desligamento - Desligue o computador.