Entre algunos de mis programas de batch y otras cosas hoy me levante con la idea de reprender un mini programa atascado. El programa en si ya esta terminado no me dedicare a copiar todo el código pero quedaría así:
@echo off
echo APAGADO DEL ORDENADOR
echo.
echo Cuanto tiempo quiere que pase antes de que su ordenador se apague?
echo.
echo Tecle el numero respectivo y pulse enter.
echo 1. 5 minutos
echo 2. 10 "
echo 3. 15 "
echo 4. 20 "
echo 5. 30 "
...
Y continuara mucho despues seguiria asi:
if /p var=
if %var%==1 goto :1 minuto
...
Asi nos estariamso años...
Un dia empeze un código como este:
@echo off
echo. APAGADO DEL ORDENADOR
echo Cuanto tiempo quiere que pase antes de que su ordenador se apague? (en minutos)
echo.
if /p var=
cls
echo Seguro que quiere continuar?
pause>nul
shutdown -s -f -t %var%
El codigo continua pero lo escrito a mano y no quiero continuar. La question es que al parecer el comando shutdown no me le la variable como un numero. El batch cree que hago algo mal. Y no se que es.
Perdón se me olvido decir que esto es Batch. Agradecería una respuesta cuanto antes.
Gracias
Es dificil averiguar donde está el problema sin el código entero.
1- if /p var=
Ese comando dará error de sintaxis, No haces ninguna comprobación aunque tampoco sería la manera correcta de hacerlo, el parámetro "/P" es para setear.
set /p var=
No sé la intención tuya de esa linea así que no puedo ayudar mucho más.
2- Prueba expandiendo la variable VAR:
@Echo OFF
Setlocal enabledelayedexpansion
...
...
shutdown -s -f -t !var!
De todas formas te he hecho este code que hace la tarea más fácil sin tener que escribir 800 comprobaciones en el code :P
@Echo OFF
:Menu
Cls
Echo: APAGADO DEL ORDENADOR | MORE
Echo: Cuantos minutos quiere que pase antes de que su ordenador se apague? | MORE
Echo: [*] Teclee el numero de minutos respectivo y pulse enter. | MORE
Echo: [*] Teclee "0" si desea cancelar el apagado programado... | MORE
Set /P NUM= ^>^>
IF NOT defined NUM (Goto :Menu)
Echo "%NUM%" | Findstr /I "[A-Z]" >Nul
IF NOT %Errorlevel% EQU 1 (Set "NUM=" & Goto :Menu) Else (Set /A NUM*=60)
:Shutdown
If %NUM% EQU 0 (Shutdown -a 2>NUL) ELSE (Shutdown -S -F -T %NUM% & Set /A NUM/=60)
:Fin
Cls
If %NUM% EQU 0 (
Echo: Se ha cancelado el apagado de su PC.
) ELSE (
Echo: Se ha programado el apagado de su PC para dentro de %num% minutos.
)
Pause > Nul
Exit
Salu2.
Ahora probare tu codigo pero no lo entiendo. Que problemas tiene el mio? En teoria si ejecuto el segundo digo los minutos necesarios, me pregunta si quiero continuar. Y en teoria donde pone %var% equivale al numero de minutos asignados lo que no entiendo es porque no coje el %var% Y la verdad dame alguna guia para entender tu codigo porque no entiendo la mayoria. Ahora lo pruebo haber si va.
Edit2: Otra cosa: Haber si puedes editar tu codigo porque me olvide decir que el codigo real empezaria asi:
@echo off
echo. APAGADO DEL ORDENADOR
echo Que desea hacer?
echo.
echo 1. Apagar el ordenador mas tarde
echo.
echo 2. Cancelar el apagado
if /p var=
if %var%==1 goto :apagado
if %var%==2 goto :parar
:parar
shutdown -a
El ultimo comando lodigo de memoria no se si esta bien.
Perdon es cierto lo he comparado con el comando real y es asi: set /p var=
Cita de: ELVJop en 5 Abril 2012, 11:11 AM
Que problemas tiene el mio?
A primera vista diría que el error está en "if /p var=" como ya te expliqué.
Si necesitas más ayuda pon el código entero aunque séa muy largo para examinarlo mejor
Cita de: ELVJop en 5 Abril 2012, 11:11 AM
En teoria si ejecuto el segundo digo los minutos necesarios
No, No estás seteando ningún número ni haciendo ninguna comprobación del número, hazlo así:
@echo off
echo. APAGADO DEL ORDENADOR
echo Cuanto tiempo quiere que pase antes de que su ordenador se apague? (en minutos)
echo.
Set /p var= Escribe el numero:
Set /A var*=60
cls
echo Seguro que quiere continuar?
pause>nul
shutdown -s -f -t %var%
EDITO: Te recuerdo que el número debe ser en segundos, no puedes definir minutos en el comando shutdown.
Te me has adelantado en mi edición te digo que el comando bueno es set /p var pero sigue dandome error prueba tu este codigo:
@echo off
echo. APAGADO DEL ORDENADOR
echo Cuanto tiempo quiere que pase antes de que su ordenador se apague? (en minutos)
echo.
Set /p var= Escribe el numero:
Set /A num*=60
cls
echo Seguro que quiere continuar?
pause>nul
shutdown -s -f -t %var%
pause>nul
veras como no te funciona. PD: Le agregue pause>nul para que vieras el mensaje de error que te da la maquina de comandos.
La proxima vez que tenga una duda cojere el codigo raiz y no lo dire de memoria perdon. :P
Cita de: ELVJop en 5 Abril 2012, 11:21 AM
veras como no te funciona. PD: Le agregue pause>nul para que vieras el mensaje de error que te da la maquina de comandos.
La proxima vez que tenga una duda cojere el codigo raiz y no lo dire de memoria perdon. :P
El código funciona a la perfección, Solamente cambia "num" por "var", Como puse en el código de mi última respuesta
Salu2
ME degas un lick de donde empezaste a prender ese batch avanzado?
PD: Quando mde deges el link la duda queda resuelta gracias.
Cita de: ELVJop en 5 Abril 2012, 12:11 PMME degas un lick de donde empezaste a prender ese batch avanzado?
Empezé leyendo uno o dos tutoriales, Pero más que lectura han sido muchos años de práctica, Experiencia propia, Y ayuda cuando la necesité.
En Batch hay poco que aprender, Aquí puedes aprender lo más importante:
http://ss64.com/nt/syntax-args.html
http://ss64.com/nt/for.html
http://ss64.com/nt/if.html
http://ss64.com/nt/set.html
http://ss64.com/nt/call.html
Y aqui puedes analizar codes para aprender técnicas avanzadas:
Rob Van Der Woude (http://www.robvanderwoude.com/batchfiles.php)
ss64 (http://ss64.com/nt/)
PD: Si prefieres tutoriales en castellano, Puedes usar el buscador del foro, Hay muchos.
Salu2.
Gracias ya puedes cerrar.