Autor
|
Tema: [BATCH] Problemas con else if (Leído 11,079 veces)
|
ovichan
Desconectado
Mensajes: 81
|
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. color 0A title Apagado condicional :inicio echo 1. Apagar en un tiempo espec¡fico set /p eleccion="Elija una opci¢n: " if %eleccion%==2 shutdown -s -f if %eleccion%==3 shutdown -r -f if %eleccion%==4 shutdown -l -f if %eleccion%==5 shutdown -h -f if %eleccion%==6 goto cancelar echo Elecci¢n inv lida: %eleccion% cls :apagado cls set /p min="Minutos antes de apagar: " shutdown -s -f -t %sec% cls :: Opcion con extractor de caracteres rem set h=%time:~0,2% rem set m=%time:~3,2% rem set s=%time:~6,2% rem set ms=%time:~9,2% :: Opcion con bucle for /F "tokens=1,2,3,4 delims=:," %%H in (" %time%" ) do set "h= %%H" & set "m= %%I" & set "s= %%J" & set "ms= %%K" :: Suma de los minutos insertados a la hora actual, para ser mostrada en la interfaz :: Reajustar horas y minutos if %m% GEQ 60 set /a h= %h%+ (%m%/60 ) && set /a m= (%m%)%%60
Esta es la parte que no funciona: :: Mensaje de salida, en formatos diferentes IF %h% LSS 10 (IF %m% LSS 10 (" echo El apagado se iniciar a las 0 %h%:0 %m%: %s%, %ms%." ) IF %h% GEQ 10 (IF %m% LSS 10 (" echo El apagado se iniciar a las %h%:0 %m%: %s%, %ms%." )) IF %h% LSS 10 (IF %m% GEQ 10 (" echo El apagado se iniciar a las 0 %h%: %m%: %s%, %ms%." )) echo "El apagado se iniciar a las %h%: %m%: %s%, %ms%." ) ) ) :cancelar cls shutdown -a cls
Saludos y gracias de antemano.
|
|
« Última modificación: 13 Julio 2012, 22:51 pm por EleKtro H@cker »
|
En línea
|
|
|
|
Binary_Death
Desconectado
Mensajes: 214
|
Un else-if tipo C, en batch sería: 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
Mensajes: 81
|
Ok, entonces creo que el fallo lo tengo en ciertos parentesis IF %h% LSS 10 (IF %m% LSS 10 (" echo El apagado se iniciar a las 0 %h%:0 %m%: %s%, %ms%." ) IF %h% GEQ 10 (IF %m% LSS 10 (" echo El apagado se iniciar a las %h%:0 %m%: %s%, %ms%." )) IF %h% LSS 10 (IF %m% GEQ 10 (" echo El apagado se iniciar a las 0 %h%: %m%: %s%, %ms%." )) echo "El apagado se iniciar a las %h%: %m%: %s%, %ms%." ) ) )
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 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
Mensajes: 214
|
¿Por qué le has puesto comillas a los echo? Prueba en la cmd: 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. Ejecuta comando2 sólo si el errorlevel devuelto por comando1 es 0. Ejecuta comando 2 sólo si el errorlevel devuelto por comando1 no es 0. Pero no se pueden usar en los condicionales. Saludos
|
|
|
En línea
|
|
|
|
ovichan
Desconectado
Mensajes: 81
|
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: :: Mensaje de salida, en formatos diferentes echo El apagado se iniciar a las %h%: %m%: %s%, %ms%.
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
Mensajes: 9.878
|
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"... REM IF "%S%" LSS "10" (Set "S=0%S%") Echo: El apagado se iniciara a las %h%: %m%: %s%, %ms%. | MORE
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
Mensajes: 81
|
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: Echo El apagado se iniciara a las %h%: %m%: %s%, %ms%.
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Batch File Creator - (Generador de Archivos Binarios con BATCH)
Scripting
|
sirdarckcat
|
6
|
15,956
|
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
|
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
|
31 Mayo 2009, 19:33 pm
por daniel69
|
|
|
problemas en batch
Scripting
|
eldavid1996
|
5
|
3,710
|
7 Noviembre 2009, 03:50 am
por <ИΘZIЭ(ŦB>
|
|
|
Problemas batch registro
Scripting
|
_
|
2
|
4,109
|
26 Julio 2010, 11:44 am
por _
|
|