Problema código lectura de variable en el apagado

Iniciado por ELVJop, 5 Abril 2012, 10:25 AM

0 Miembros y 1 Visitante están viendo este tema.

ELVJop

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
El dia 3 de mayo esta cuenta sera borrada.

Eleкtro

#1
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:
Código (dos) [Seleccionar]
@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

Código (dos) [Seleccionar]
@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.









ELVJop

#2
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=
El dia 3 de mayo esta cuenta sera borrada.

Eleкtro

#3
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í:
Código (dos) [Seleccionar]

@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.








ELVJop

#4
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
El dia 3 de mayo esta cuenta sera borrada.

Eleкtro

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








ELVJop

ME degas un lick de donde empezaste a prender ese batch avanzado?

PD: Quando mde deges el link la duda queda resuelta gracias.
El dia 3 de mayo esta cuenta sera borrada.

Eleкtro

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
ss64

PD: Si prefieres tutoriales en castellano, Puedes usar el buscador del foro, Hay muchos.

Salu2.








ELVJop

El dia 3 de mayo esta cuenta sera borrada.