Apagado programado en BATCH


Apagado programado en BATCH

Archivo con instrucciones MS-DOS para la ejecución de un apagado programado en BATCH con su respectivo detalle para comprender mejor su funcionamiento.

Windows posee una utilidad para apagar el equipo (además del botón apagado obviamente). Shutdown.exe permite apagar y reiniciar nuestro equipo ingresando las opciones correspondientes por medio de linea de comandos en CMD o incluso desde la ventana Ejecutar.

Para ver todas las opciones del comando shutdown, sólo deben ingresar en el CMD el comando shutdown /?.

El siguiente código batch permitirá consultarnos en cuanto tiempo queremos que nuestro equipo se apague. Luego nos pedirá confirmación para ejecutar el apagado, cancelar para volver a ingresar los valores o salir del script.

El script en detalle

A continuación el código con sus respectivos comentarios:

@echo off

En primer lugar, apagamos el echo para que no muestre los comandos

title Apagado programado

Le damos un titulo a la ventaba CMD

:inicio

Nombramos un label para el comando goto

cls

Limpiamos la pantalla

echo Debe ingresar al menos un numero en cada opcion:

Muestra este texto

echo.

Agrega un espacio

set /p var1=Ingrese cantidad de horas:

Solicita las horas en que se deberá apagar el equipo y se guardará en la variable var1

set /p var2=Ingrese cantidad de minutos:

Solicita los minutos en que se deberá apagar el equipo y se guardará en la variable var2

set /p var3=Ingrese cantidad de segundos:

Solicita los segundos en que se deberá apagar el equipo y se guardará en la variable var3

set en=en

Variable para mostrar o no la palabra en

Algunos condicionales

if not “%var1%”==”0” (set h=%var1% hora &if not %var1% == 1 (set h=%var1% horas )) else (set h=)

Si la variable de la hora no es 0 (cero), hará lo que sigue -> crea variable h con el número más la palabra hora. Además, si no es igual a 1, cambia la variable anterior y agrega una s a hora. Mientras que si es igual a 0, cambiará la variable “h” a nada.

if not “%var2%”==”0” (set m=%var2% minuto &if not %var2% == 1 (set m=%var2% minutos )) else (set m=)

Si la variable de los minutos no es 0 (cero), hará lo que sigue -> crea variable m con el número más la palabra minuto. Además, si no es igual a 1, cambia la variable anterior y agrega una s a minuto. Mientras que si es igual a 0, cambiará la variable “m” a nada.

if not “%var3%”==”0” (set s=%var3% segundo&if not %var3% == 1 (set s=%var3% segundos)) else (set s=)

Si la variable de los segundos no es 0 (cero), hará lo que sigue -> crea variable s con el número más la palabra segundo. Además, si no es igual a 1, cambia la variable anterior y agrega una s a segundo. Mientras que si es igual a 0, cambiará la variable “s” a nada.

if “%var1%”==”0” if %var2% == 0 if %var3% == 0 (set n=inmediatamente&set en=)

Si las 3 variables (hora, minuto, segundo) son 0, entonces escribe “inmediatamente” y también cambia la variable “en” a nada.

cls
echo.
echo Desea apagar el equipo %en%%h%%m%%s%%n%?

Texto de cada variable anterior mostrando la cantidad de horas, minutos y segundos en las que se desea apagar el pc. Esto es ideal, ya que es posible que nos equivoquemos al ingresar la hora.

echo *****-=[CONFIRMAR]=-*****
echo 1) Si
echo 2) No
echo 3) Salir

Lo anterior es texto a mostrar (menú) para las opciones. Si nos equivocamos en ingresar la hora, podemos volver al inicio y comenzar de nuevo seleccionando la opción 2. Del mismo modo, se puede continuar seleccionando la opción 1.

Cálculos del script

set /p var=Seleccione una opcion [1-3]:

se elige opción

if “%var%”==”1” goto suma

Si la opción es 1, entonces va al label suma

if “%var%”==”2” goto inicio

Si la opcion es 2, entonces vuelve al label inicio

if “%var%”==”3″ cls&exit

si la opcion es 3, entonces limpia y sale del script

:suma

Label suma

cls
set /a total=((%var1%*3600)+(%var2%*60)+%var3%)

Se obtiene el total de segundos

set /a vs=(%time:~6,2%+%var3%)

Se suman segundos actuales+variable set cs=0 set cm=0

:while1 if %vs% GEQ 60 (

Mientras la anterior suma es igual o mayor que 60

set /a vs=%vs%-60

Se restan 60

set cs=cs+1

Se suma 1 a cs -> esto agrega 1 minuto por cada 60 segundos

goto while1)

Se vuelve a while1

set /a vm=(%time:~3,2%+%var2%+%cs%)

Se suman minutos actuales+variable+cs

:while2 if %vm% GEQ 60 (

Mientras la anterior suma es igual o mayor que 60

set /a vm=%vm%-60

Se restan 60

set cm=cm+1

Se suma 1 -> esto agrega 1 hora por cada 60 segundos

goto while2)

Se vuelve a while2

set /a vh=(%time:~0,2%+%var1%+%cm%)

Se suman horas actuales+variable+cm

:while3 if %vh% GEQ 24 (

Mientras la anterior suma es igual o mayor que 24

set /a vh=%vh%-24

Se restan 24

goto while3)

Se vuelve a while3

echo.
echo El equipo se apagara a las %vh%:%vm%:%vs%

Se muestra la hora especifica en la que se apagará el equipo mientras se ejecuta en el siguiente código el apagado.

Ejecución del apagado

shutdown.exe -s -f -t %total% -c " "

El comando para apagar el equipo con sus respectivas opciones: -s apaga el equipo, -f fuerza el cierre de aplicaciones, -t %total% la cantidad de segundos que tardará en apagar (el total es la variable del label suma), -c ” ” Esto muestra un mensaje de apagado, pero al tener ” ” no muestra dicho mensaje (si son menos de 60 segundos salta un mensaje anunciando el apagado en menos de 1 minuto).

ping -n 5 127.0.0.1 > nul

Sirve para que el mensaje anterior se muestre 5 segundos mientras se hace un ping a nuestra loopback, pero sin mostrar sus mensajes al mandarlos a nul

exit

Finalmente, sale del script

Como resultado, tendremos un script con el cual se podrá programar el apagado del equipo en Windows.

El texto del script debe ser pegado en un block de notas y guardado con la extension .bat o .cmd, ya que son las extensiones para que se ejecuten este tipo de archivos en Windows.

Puedes descargar el script desde ESTE LINK, ya que debido al formato de la web, es posible que se guarden mal las comillas u otro caracter en el block de notas.