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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Se puede hacer un IF dentro de un ELSE?? (BATCH)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Se puede hacer un IF dentro de un ELSE?? (BATCH)  (Leído 3,077 veces)
juntacadaveres

Desconectado Desconectado

Mensajes: 76



Ver Perfil
Se puede hacer un IF dentro de un ELSE?? (BATCH)
« en: 22 Abril 2019, 18:03 pm »

He estado haciendo un script para creación de usuarios desde el contenido de un archivo de texto plano y estoy sospechando de que no me sale por poner un IF después de un ELSE. Así que hice un script más simple aparte para comprobar si esto era cierto
aquí el script:

Código
  1. @ECHO OFF
  2. SET NUM1=1
  3. SET NUM2=2
  4. SET OPT=
  5. SET SUM=
  6. IF %NUM1%==%NUM2% (
  7.    ECHO SON IGUALES
  8. ) ELSE (
  9.    ECHO NO SON IGUALES
  10.    ECHO PEQUENIO MENU CON DOS OPCIONES
  11.    ECHO A- SUMAR
  12.    ECHO B- SALIR
  13.    SET /P OPT="SELECCIONA UNA OPCION > "
  14.    IF "%OPT%"=="A" (
  15.        SET /A SUM= %NUM1% + %NUM2%
  16.        ECHO EL RESULTADO DE 1 + 2 ES %SUM%
  17.    )
  18.    IF "%OPT%"=="B" (
  19.        ECHO SALIENDO DEL PROGRAMA && PAUSE>NUL && EXIT
  20.    )
  21. )
  22.  
  23. PAUSE>NUL
El script funciona correctamente hasta llegar al apartado del IF "%opt%"


En línea

juntacadaveres

Desconectado Desconectado

Mensajes: 76



Ver Perfil
Re: Se puede hacer un IF dentro de un ELSE?? (BATCH)
« Respuesta #1 en: 22 Abril 2019, 18:57 pm »

Mejoré el script

Código
  1. @ECHO OFF
  2. SET NUM1=1
  3. SET NUM2=2
  4. SET OPT=
  5. SET SUM=
  6. IF %NUM1%==%NUM2% (
  7.    ECHO SON IGUALES
  8. ) ELSE (
  9.    ECHO NO SON IGUALES
  10.    ECHO PEQUENIO MENU CON DOS OPCIONES
  11.    ECHO 1- SUMAR
  12.    ECHO 2- SALIR
  13.    SET /P OPT="SELECCIONA UNA OPCION > "
  14.    IF "%OPT%"=="1" GOTO A
  15.    IF "%OPT%"=="2" GOTO B
  16. )
  17.  
  18. :A
  19. SET /A SUM= %NUM1% + %NUM2%
  20. ECHO EL RESULTADO DE 1 + 2 ES %SUM%
  21. PAUSE>NUL && EXIT
  22.  
  23. :B
  24. ECHO SALIENDO DEL PROGRAMA && PAUSE>NUL && EXIT
  25. PAUSE>NUL

Y no me funciona
en ambos casos me manda hacia A
aunque ponga B


En línea

EdePC
Moderador Global
***
Desconectado Desconectado

Mensajes: 2.176



Ver Perfil
Re: Se puede hacer un IF dentro de un ELSE?? (BATCH)
« Respuesta #2 en: 22 Abril 2019, 19:30 pm »

Saludos,

- Las variables en Bacth tienen un comportamiento inusual cuando se ejecutan en sentencias de una sola línea como sentencia & sentencia, o sentencia | sentencia, etc, las sentencias que van entre paréntesis se consideran que van en línea.

- Ese comportamiento inusual hace que las variables  no actualicen sus valores, se le asigna un valor la primera vez y luego no se notarán siguientes cambios hasta que termine la sentencia en línea.

- Para solucionar esto se utiliza SETLOCAL EnableDelayedExpansion, esto hace que las variables si se actualicen tal como se espera, pero las variables deben cambiar su notación %variable% por !variable!.

- Recuerda que para SET /A no es necesario utilizar %variable% o !variable!, esto se sobreentiende.

Código
  1. @ECHO OFF
  2. SETLOCAL EnableDelayedExpansion
  3. SET NUM1=1
  4. SET NUM2=2
  5. SET OPT=
  6. SET SUM=
  7. IF !NUM1!==!NUM2! (
  8.    ECHO SON IGUALES
  9. ) ELSE (
  10.    ECHO NO SON IGUALES
  11.    ECHO PEQUENIO MENU CON DOS OPCIONES
  12.    ECHO 1- SUMAR
  13.    ECHO 2- SALIR
  14.    SET /P OPT="SELECCIONA UNA OPCION > "
  15.    IF "!OPT!"=="1" GOTO A
  16.    IF "!OPT!"=="2" GOTO B
  17. )
  18.  
  19. :A
  20. SET /A SUM=NUM1 + NUM2
  21. ECHO EL RESULTADO DE 1 + 2 ES !SUM!
  22. PAUSE>NUL && EXIT
  23.  
  24. :B
  25. ECHO SALIENDO DEL PROGRAMA && PAUSE>NUL && EXIT
  26. PAUSE>NUL

- Otra forma es usando CALL. Ver el comportamiento de todo esto en:
https://ss64.com/nt/delayedexpansion.html
« Última modificación: 22 Abril 2019, 19:33 pm por EdePC » En línea

juntacadaveres

Desconectado Desconectado

Mensajes: 76



Ver Perfil
Re: Se puede hacer un IF dentro de un ELSE?? (BATCH)
« Respuesta #3 en: 22 Abril 2019, 20:39 pm »

Saludos,

- Las variables en Bacth tienen un comportamiento inusual cuando se ejecutan en sentencias de una sola línea como sentencia & sentencia, o sentencia | sentencia, etc, las sentencias que van entre paréntesis se consideran que van en línea.

- Ese comportamiento inusual hace que las variables  no actualicen sus valores, se le asigna un valor la primera vez y luego no se notarán siguientes cambios hasta que termine la sentencia en línea.

- Para solucionar esto se utiliza SETLOCAL EnableDelayedExpansion, esto hace que las variables si se actualicen tal como se espera, pero las variables deben cambiar su notación %variable% por !variable!.

- Recuerda que para SET /A no es necesario utilizar %variable% o !variable!, esto se sobreentiende.

Código
  1. @ECHO OFF
  2. SETLOCAL EnableDelayedExpansion
  3. SET NUM1=1
  4. SET NUM2=2
  5. SET OPT=
  6. SET SUM=
  7. IF !NUM1!==!NUM2! (
  8.    ECHO SON IGUALES
  9. ) ELSE (
  10.    ECHO NO SON IGUALES
  11.    ECHO PEQUENIO MENU CON DOS OPCIONES
  12.    ECHO 1- SUMAR
  13.    ECHO 2- SALIR
  14.    SET /P OPT="SELECCIONA UNA OPCION > "
  15.    IF "!OPT!"=="1" GOTO A
  16.    IF "!OPT!"=="2" GOTO B
  17. )
  18.  
  19. :A
  20. SET /A SUM=NUM1 + NUM2
  21. ECHO EL RESULTADO DE 1 + 2 ES !SUM!
  22. PAUSE>NUL && EXIT
  23.  
  24. :B
  25. ECHO SALIENDO DEL PROGRAMA && PAUSE>NUL && EXIT
  26. PAUSE>NUL

- Otra forma es usando CALL. Ver el comportamiento de todo esto en:
https://ss64.com/nt/delayedexpansion.html

Muchas gracias por tu ayuda.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Esto se puede hacer con VBS o Batch? « 1 2 »
Scripting
CiscoIT 12 7,070 Último mensaje 26 Octubre 2009, 18:50 pm
por Novlucker
se puede hacer esto con variables? [batch]
Scripting
morenochico 3 3,592 Último mensaje 14 Septiembre 2011, 22:44 pm
por leogtz
Se puede hacer esto con un BATCH??? ( Modificar algo en el registro )
Scripting
beholdthe 5 5,430 Último mensaje 30 Noviembre 2011, 20:13 pm
por beholdthe
[Ayuda] Se puede hacer esto en Batch...!!!
Scripting
user_foro 4 3,395 Último mensaje 7 Agosto 2015, 23:24 pm
por user_foro
Se puede Hacer un Batch que haga un nestat
Scripting
EARM 4 2,853 Último mensaje 15 Diciembre 2015, 14:47 pm
por EARM
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines