elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BATCH] Problemas con else if
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [BATCH] Problemas con else if  (Leído 11,079 veces)
ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
[BATCH] Problemas con else if
« en: 13 Julio 2012, 19:35 pm »

Buenas, se que en este lenguaje no existe la particula propiamente dicha, ELSE IF sino que hay que hacer otra cosa. He estado mirando por la web y la solucion seria anidar los condicionales pero desgraciadamente no me sale  :-(

Os dejo el código, y marco de negro la zona conflictiva. A ver en que me estoy equivocando.

Código
  1. @echo off
  2. color 0A
  3. title Apagado condicional
  4.  
  5. :inicio
  6. echo ¨Qu‚ quieres hacer?
  7. echo 1. Apagar en un tiempo espec¡fico
  8. echo 2. Apagar
  9. echo 3. Reiniciar
  10. echo 4. Cerrar sesion
  11. echo 5. Hibernar
  12. echo 6. Cancelar
  13. echo 7. Quitar
  14.  
  15. set /p eleccion="Elija una opci¢n: "
  16. if %eleccion%==1 goto apagado
  17. if %eleccion%==2 shutdown -s -f
  18. if %eleccion%==3 shutdown -r -f
  19. if %eleccion%==4 shutdown -l -f
  20. if %eleccion%==5 shutdown -h -f
  21. if %eleccion%==6 goto cancelar
  22. if %eleccion%==7 exit
  23. echo Elecci¢n inv lida: %eleccion%
  24. cls
  25. goto inicio
  26.  
  27. :apagado
  28. cls
  29. set /p min="Minutos antes de apagar: "
  30. set /a sec=60*%min%
  31. shutdown -s -f -t %sec%
  32. cls
  33.  
  34. :: Opcion con extractor de caracteres
  35. rem set h=%time:~0,2%
  36. rem set m=%time:~3,2%
  37. rem set s=%time:~6,2%
  38. rem set ms=%time:~9,2%
  39.  
  40. :: Opcion con bucle
  41.  
  42. for /F "tokens=1,2,3,4 delims=:," %%H in ("%time%") do set "h=%%H" & set "m=%%I" & set "s=%%J" & set "ms=%%K"
  43.  
  44. :: Suma de los minutos insertados a la hora actual, para ser mostrada en la interfaz
  45. set /a m=%m%+%min%
  46.  
  47. :: Reajustar horas y minutos
  48. if %m% GEQ 60 set /a h=%h%+(%m%/60) && set /a m=(%m%)%%60
  49. if %h% GEQ 24 set /a h=(%h%)%%24

Esta es la parte que no funciona:
Código
  1. :: Mensaje de salida, en formatos diferentes
  2.  
  3. IF %h% LSS 10 (IF %m% LSS 10 ("echo El apagado se iniciar  a las 0%h%:0%m%:%s%,%ms%.")
  4.  
  5. ) ELSE (
  6.  
  7. IF %h% GEQ 10 (IF %m% LSS 10 ("echo El apagado se iniciar  a las %h%:0%m%:%s%,%ms%."))
  8.  
  9. ) ELSE (
  10.  
  11. IF %h% LSS 10 (IF %m% GEQ 10 ("echo El apagado se iniciar  a las 0%h%:%m%:%s%,%ms%."))
  12.  
  13. ) ELSE (
  14.  
  15. echo "El apagado se iniciar  a las %h%:%m%:%s%,%ms%."
  16.  
  17. )
  18. )
  19. )
  20.  
  21. goto inicio
  22.  
  23. :cancelar
  24. cls
  25. shutdown -a
  26. cls
  27. goto inicio



Saludos y gracias de antemano.


« Última modificación: 13 Julio 2012, 22:51 pm por EleKtro H@cker » En línea

Binary_Death

Desconectado Desconectado

Mensajes: 214



Ver Perfil
Re: [BATCH] Problemas con else if
« Respuesta #1 en: 13 Julio 2012, 19:41 pm »

Un else-if tipo C, en batch sería:

Código:

If condicion1 (accion) else (
                   if condicion2 (accion) else (
                                      if condicion3 (accion)
                                      ...
                                      ) else (
                                      acciondefault


Cerrando todos los bloques pertinentes.


« Última modificación: 13 Julio 2012, 19:44 pm por Binary_Death » En línea

ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [BATCH] Problemas con else if
« Respuesta #2 en: 13 Julio 2012, 19:56 pm »

Ok, entonces creo que el fallo lo tengo en ciertos parentesis

Código
  1. IF %h% LSS 10 (IF %m% LSS 10 ("echo El apagado se iniciar  a las 0%h%:0%m%:%s%,%ms%.")
  2.  
  3. ) ELSE (
  4.  
  5. IF %h% GEQ 10 (IF %m% LSS 10 ("echo El apagado se iniciar  a las %h%:0%m%:%s%,%ms%."))
  6.  
  7. ) ELSE (
  8.  
  9. IF %h% LSS 10 (IF %m% GEQ 10 ("echo El apagado se iniciar  a las 0%h%:%m%:%s%,%ms%."))
  10.  
  11. ) ELSE (
  12.  
  13. echo "El apagado se iniciar  a las %h%:%m%:%s%,%ms%."
  14.  
  15. )
  16. )
  17. )

Los he quitado y al menos el script ya no se cierra pero me indica: El nombre de archivo, el nombre de directorio o la sintaxis de la etiqueta del volumen no son correctos.

Y otra duda, no se puede usar como en C los operadores logicos &&?? Para algo como:

If condicion1 && condicion2 (accion) else (acciondefault)

EDITO: Ahora no me muestra ni el mensaje arrgggggg >:D

EDITO2: He detectado que el error esta marcado en esta linea: IF %h% LSS 10 (IF %m% GEQ 10 ("echo El apagado se iniciar  a las 0%h%:%m%:%s%,%ms%.")

Pero no se pq
« Última modificación: 13 Julio 2012, 23:48 pm por EleKtro H@cker » En línea

Binary_Death

Desconectado Desconectado

Mensajes: 214



Ver Perfil
Re: [BATCH] Problemas con else if
« Respuesta #3 en: 13 Julio 2012, 20:34 pm »

¿Por qué le has puesto comillas a los echo?

Prueba en la cmd:

Código:
"echo Hola Mundo"

Dará error.

Respecto a los operadores lógicos, no, no se pueden usar como en C (lástima, sería útil a veces).
Estos operadores sirven para trabajar con los errorlevel de los comandos.

Código:
comando1 && comando2

Ejecuta comando2 sólo si el errorlevel devuelto por comando1 es 0.

Código:
comando1 || comando2

Ejecuta comando 2 sólo si el errorlevel devuelto por comando1 no es 0.

Pero no se pueden usar en los condicionales.

Saludos  :P
En línea

ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [BATCH] Problemas con else if
« Respuesta #4 en: 13 Julio 2012, 20:41 pm »

Los he borrado pero sigue sin funcionarme la linea. Sin embargo, he dado con la solucion aunque no es de mi agrado pues queria haberlo hecho con condicionales anidados.

Solucion:
Código
  1. :: Mensaje de salida, en formatos diferentes
  2.  
  3. IF %h% LSS 10 (IF %m% LSS 10 (echo El apagado se iniciar  a las 0%h%:0%m%:%s%,%ms%. && echo. && goto inicio))
  4. IF %h% GEQ 10 (IF %m% LSS 10 (echo El apagado se iniciar  a las %h%:0%m%:%s%,%ms%.  && echo. && goto inicio))
  5. IF %h% LSS 10 (IF %m% GEQ 10 (echo El apagado se iniciar  a las 0%h%:%m%:%s%,%ms%.  && echo. && goto inicio))
  6.  
  7. echo El apagado se iniciar  a las %h%:%m%:%s%,%ms%.
  8.  
  9. goto inicio

Esta claro que el problema provenia de cuando el programa interpreta las condiciones, al estar anidados ni si quiera valora la tercera condicion saliendo de los condicionales anidados.

Vamos que cuando exponia el caso de que la hora es menor de 10 y los minutos mayor de 10, como interpreta las condiciones anteriores y las valora, se rompia el proceso cuando pasaba por GEQ 10, al no cumplirse se rompia y no saltaba al siguiente ELSE.

Eso creo que es lo que pasaba. Saludos



Moderador: ¿Porque sigues usando en las respuestas el botón "citar" para insertar código?  :-/
« Última modificación: 13 Julio 2012, 22:52 pm por EleKtro H@cker » En línea

Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
Re: [BATCH] Problemas con else if
« Respuesta #5 en: 13 Julio 2012, 23:47 pm »

ovichan, La estás liando pero mucho, Si quisieras crear una cuenta atrás, aún aceptaria el método que estás intentando con condicionales, Pero tú propósito es mostrar el comando del "echo" con la hora, una única vez, Por lo tanto, Lo más coherente además de sencillo y eficaz, Es manipular el string para añadirle el "0"...
Código
  1. IF "%H%" LSS "10" (Set "H=0%H%")
  2. IF "%M%" LSS "10" (Set "M=0%M%")
  3. REM IF "%S%" LSS "10" (Set "S=0%S%")
  4.  
  5. Echo: El apagado se iniciara a las %h%:%m%:%s%,%ms%. | MORE
  6. Goto :Inicio

Saludos.


EDITO: Quizás esto es un poco OFFTOPIC, Pero por si llegases a plantearte hacer una cuenta regresiva con el tiempo de apagado, Te dejo esta info que te puede ayudar:

http://foro.elhacker.net/scripting/batch_problema_script_cuenta_regresiva-t363802.0.html;msg1755901#msg1755901
+ http://foro.elhacker.net/empty-t358542.0.html
« Última modificación: 14 Julio 2012, 02:21 am por EleKtro H@cker » En línea



ovichan

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: [BATCH] Problemas con else if
« Respuesta #6 en: 14 Julio 2012, 00:40 am »

Cierto cierto es mas sencillo, pero cuesta acomodarse a este lenguaje y sus limitaciones y demás; muxas veces dudo si se pueden hacer ciertas cosas o no. Gracias por el off, le echare un ojo. Saludos cracks

EDITO: Tu forma me iba bien pero en horas de madrugada se seguia comiendo el cero incluso dandole el formato, y se debe a las comillas. Siendo lo correcto para mi caso:

Código
  1. IF %H% LSS 10 (Set H=0%H%)
  2. IF %M% LSS 10 (Set M=0%M%)
  3.  
  4.  
  5. Echo El apagado se iniciara a las %h%:%m%:%s%,%ms%.
  6. Goto :Inicio

Para los segundo no hace falta, win los incluye automaticamente O_o
« Última modificación: 14 Julio 2012, 02:20 am por EleKtro H@cker » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Batch File Creator - (Generador de Archivos Binarios con BATCH)
Scripting
sirdarckcat 6 15,956 Último mensaje 24 Noviembre 2006, 07:38 am
por Hendrix
[BATCH+VBS] Manual - Creación de Timers en Batch (Pausas o Esperas...)
Scripting
EddyW 0 4,537 Último mensaje 16 Abril 2009, 08:58 am
por EddyW
[BATCH] Problema con Quick Batch compiler, incluir 2 archivos BAT. « 1 2 »
Scripting
daniel69 17 13,685 Último mensaje 31 Mayo 2009, 19:33 pm
por daniel69
problemas en batch
Scripting
eldavid1996 5 3,710 Último mensaje 7 Noviembre 2009, 03:50 am
por <ИΘZIЭ(ŦB>
Problemas batch registro
Scripting
_ 2 4,109 Último mensaje 26 Julio 2010, 11:44 am
por _
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines