¿Hay alguna manera de ver cuánto tiempo queda antes de un apagado programado en Windows 7?
Por apagado programado me refiero a un apagado (o reinicio) programado usando la shutdown.exeaplicación de línea de comando , por ejemplo:
shutdown /t 600 /s
Aparecería un cuadro de mensaje que indica que faltan 10 minutos para el apagado y la hora real de apagado del sistema.
En cualquier momento más largo que 600segundos se usa un mensaje de globo en su lugar.
Recuerdo vagamente que XP proporcionaba un monitor de progreso de la GUI, con una cuenta regresiva.
¿Cómo funcionaron? El tiempo de apagado restante o el tiempo programado deben almacenarse en algún lugar, ¿cómo puedo acceder a esto?
Mi preferencia es algún método a través de la línea de comando (es decir, no GUI). Más importante aún, ¿esto se puede lograr en Windows, es decir, sin ningún programa de terceros?
Si esto no se puede lograr con las utilidades estándar de Windows (y estoy limitando con el territorio de Stack Overflow aquí), ¿hay una API de Windows (o .NET, que incluso podría usarse en PowerShell)? Cualquiera de los dos sería preferible a algún programa de terceros aleatorio.

/c <time>).Respuestas:
La pregunta era interesante, así que escribí un lote que puede hacer el trabajo por usted.
Básicamente es un temporizador de cuenta regresiva, no incluí el
shutdowncomando para esto, pero lo dejé como tarea. Los cálculos no son precisos, esto no se preocupa por los años bisiestos, la duración del mes, ... esto es principalmente para facilitar la lectura, ya que quería que fuera fácil de aprender.Actualmente hay dos archivos trabajando juntos, uno inicia el temporizador y el otro, cuando se llama, indica cuánto tiempo transcurrió desde el inicio del temporizador. Estos dos archivos se pueden combinar con bastante facilidad en un script de cmd, de esta manera también puede hacer que algunas líneas sean reutilizables ( como los métodos definidos ).
Bien, echemos un vistazo a los guiones,
Aqui esta
StartTimer.cmd:En línea comenzando con
FOR /F "skip=1 ...:1. Pregunte
wmicpor la hora y fecha actuales.2. Omita la primera línea de salida, que es encabezados, en
skip=13. Lea los valores usando el
tokens=1-6significado%%a-%%fseparado por SpaceorTAB.4. Almacenar los valores de las variables
%DateY%, ...%TimeH%,%TimeM%, ...Después de eso, al comienzo de la línea
SET /A EPOCH=..., usamos una expresión que calcula los segundos transcurridos desde1.1.1970( esto es simple aproximado, no un tiempo real de Unix. Vea Google si necesita información precisa ).Luego, en la última línea
ECHO %EPOCH% > ...escribe el tiempo calculado para el archivo llamado "Timer.start.state".Y aqui
GetTimerValue.cmd:Aquí el flujo de código no es lineal de arriba a abajo. Primero
GOTO CHECKFILEetiquetamos para que los comandos de ejecución realmente comiencen en la línea que dice:CHECKFILE. Muchas cosas aquí son las mismas que con,StartTimer.cmdasí que solo explico líneas nuevas o cambiadas.Primero verificamos si
Timer.start.stateexiste un archivo de estado , si no, terminamos con un mensaje. Si se inició el temporizador y existen archivos, entonces continuamos y hacemos algunos cálculos:1. Salte a
:TIMEOUTdonde producimos los segundos transcurridos. Puede elegir una mejor etiqueta para eso ...2.
SET /P %Timer% ...lee la hora de inicio del archivo y asigna el valor a la%Timer%variable.3.
SET /A Elapsed ...calcula segundos entre la hora de inicio y ahora.4.
ECHO "Seconds ...repite el valor calculado (segundos desde el inicio del temporizador.Cómo obtener el tiempo restante:
Puedes restar
%Elapsed%de%MaxTime%:OK, explicado lo suficiente. Aquí está el guión completo
Timer.cmd:En este punto, olvidé todo lo que ya dije. Este archivo por lotes aquí está funcionando por sí mismo, por lo que no hay por separado
StartTimer.cmdoGetTimerValue.cmdsolo estoTimer.cmd. Básicamente sigue siendo el mismo, pero el flujo de código es diferente y el uso también es completamente diferente. Sin embargo, esto no guarda el estado en el archivo, por lo que ya no puede obtener el valor del temporizador después de cerrar sesión / reiniciar, si necesita este ejemplo anterior para guardar / leer el estado en / desde el archivo.El uso / ayuda para
Timer.cmdse imprime cuando se ejecuta sin argumentos. No he probado completamente esto y puede haber algunos errores tipográficos, etc., los argumentos no son infalibles.Integrar con
shutdowno cualquier otro comando:Archivo
poweroff.cmd:Uso:
poweroff <wait_seconds>para iniciar el apagado programado yTimer getobtener el tiempo transcurrido / restante.fuente
StartTimer.cmddebe llamarse explícitamente. Había escrito un pequeño programa para resolver mi problema, que publicaré cuando vuelva a mi computadora.shutdown.exe, que llamóshutdown_original.exe. Comprobaría la/tmarca y, si existiera, crearía un archivo con las horas de inicio y finalización guardadas. Al recuperar los tiempos (/retrievemarca), verificaría el registro de eventos para ver si se realizó un inicio o un aborto desde que comenzó el temporizador. No estoy seguro de cómo habría manejado las hibernaciones. No voy a publicar el código o el programa: es un desastre. Y para que el programa funcionara, tuve que jugar mucho con la configuración de seguridad, que no quiero promover.shutdown.exellamada y registrar los tiempos en un archivo, que fue lo que hizo y por qué estoy aceptando esto.