Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: juntacadaveres en 21 Abril 2019, 11:49 am



Título: Intercambiar valores de dos variables (batch) --ayuda--
Publicado por: juntacadaveres en 21 Abril 2019, 11:49 am
No sé qué hago mal....
llevo ya un par de horas intentado resolver este problema
el batch me pedirá dos números pero el primero debe ser menor que el segundo
por eso hago un intercambio de variables
ejemplo
dame un numero: 10
dame otro numero: 7
num1=10
num2=7

intecambio
num1=7
num2=10

he hecho esto pero no sé por qué demonios no me funciona
ayuda por favor

Código
  1. REM PERMUTAS LAS VARIBLES NUM. SI EL PRIMER NUMERO ES MAYOR CAMBIARLO A LA VARIABLE NUM2
  2. IF "%NUM1%" GTR "%NUM2%" (
  3.    SET VARTEMP=%NUM1%
  4.    SET NUM1=%NUM2%
  5.    SET NUM2=%VARTEMP%
  6. )
  7.    ECHO NUM1=%NUM1% VARTEMP=%VARTEMP% NUM2=%NUM2%
  8.  
  9.  
  10. PAUSE>NUL


Citar
==================================
Creacion de usuarios automatizado
==================================

Nombre de usuario > LUIS
Primer Numero > 7
Segundo Numero > 5
NUM1=5 VARTEMP=7 NUM2=


Aqui el script completo

Código
  1. @echo off
  2. REM EJERCICIO 10
  3. REM COMPROBAR SI EL QUE ABRE ESTE ARCHIVO ES ADMINISTRADOR O UN USUARIO SIN PERMISOS
  4. NET SESSION >NUL 2>NUL
  5.    GOTO :INICIO
  6. )
  7.    ECHO NO TIENES PERMISOS PARA USAR ESTE ARCHIVO && PAUSE>NUL && EXIT
  8. )
  9. REM EMPEZAMOS
  10. :inicio
  11. SET NUM1=
  12. SET NUM2=
  13. SET NOMBRE=
  14. CLS
  15. echo ==================================
  16. echo Creacion de usuarios automatizado
  17. echo ==================================
  18. set /p nombre="Nombre de usuario > "
  19. IF "%NOMBRE%"=="" (
  20.    ECHO DEBES EMPEZAR CON UNA CADENA DE TEXTO && PAUSE>NUL
  21.    GOTO INICIO
  22. )
  23. REM PEDIR PRIMER NUMERO
  24. :NUM1
  25. set /p num1="Primer Numero > "
  26. IF "%NUM1%"=="" (
  27.    ECHO DEBES DARME UN NUMERO && PAUSE>NUL && GOTO :NUM1
  28. )
  29. set /a var=%num1%
  30. IF NOT "%VAR%"=="%NUM1%" (
  31.    ECHO DEBES DARME UN NUMERO && PAUSE>NUL && GOTO :NUM1
  32. )
  33. :NUM2
  34. REM PEDIR SEGUNDO NUMERO
  35. SET /P NUM2="Segundo Numero > "
  36. IF "%NUM2%"=="" (
  37.    ECHO DEBES DARME UN SEGUNDO NUMERO && PAUSE>NUL && GOTO :NUM2
  38. )
  39. set /a var2=%num2%
  40. IF NOT "%VAR2%"=="%NUM2%" (
  41.    ECHO DEBES DARME UN NUMERO && PAUSE>NUL && GOTO :NUM2
  42. )
  43. REM PERMUTAS LAS VARIBLES NUM. SI EL PRIMER NUMERO ES MAYOR CAMBIARLO A LA VARIABLE NUM2
  44. IF "%NUM1%" GTR "%NUM2%" (
  45.    SET VARTEMP=%NUM1%
  46.    SET NUM1=%NUM2%
  47.    SET NUM2=%VARTEMP%
  48. )
  49.    ECHO NUM1=%NUM1% VARTEMP=%VARTEMP% NUM2=%NUM2%
  50.  
  51.  
  52. PAUSE>NUL
  53.  


Título: Re: Intercambiar valores de dos variables (batch) --ayuda--
Publicado por: juntacadaveres en 21 Abril 2019, 12:10 pm
Hola ya me respondo yo mismo otra vez
no hacía falta utilizar otra variable para intercambiar las dos primeras
bastaba con hacer esto

Código
  1. REM PERMUTAS LAS VARIBLES NUM. SI EL PRIMER NUMERO ES MAYOR CAMBIARLO A LA VARIABLE NUM2
  2. IF "%NUM1%" GTR "%NUM2%" (
  3.    SET NUM1=%NUM2%
  4.    SET NUM2=%NUM1%
  5. )

Joder
pero no entiendo por qué funciona el código

si num1=%num2%
y  luego hago
num2=%num1% >>>>>>>>>> pero %num1% era %num2%
entonces num2 = %num2%

no entiendo por qué esto funciona
aunque haga lo que yo quería que hiciese
no debería funcionar...
ayuda

Citar
==================================
Creacion de usuarios automatizado
==================================

Nombre de usuario > LUIS
Primer Numero > 7
Segundo Numero > 5
NOMBRE=LUIS NUM1=7 NUM2=5
INTERCAMBIO DE VARIABLES:
NOMBRE=LUIS NUM1=5 NUM2=7



Título: Re: Intercambiar valores de dos variables (batch) --ayuda--
Publicado por: juntacadaveres en 21 Abril 2019, 12:38 pm
Hola
me vuelvo a responder otra vez
la cuestión estaba en los paréntesis
que toma como una sola línea todo lo que hay dentro de él.
saludos


Título: Re: Intercambiar valores de dos variables (batch) --ayuda--
Publicado por: juntacadaveres en 21 Abril 2019, 13:51 pm
Hola al parecer todo funcionaba
hasta que meto como primer número un [10-19]
y como segundo numero uno menor a estos

(https://i.imgur.com/MFZgKRn.jpg)

(https://i.imgur.com/ND1ugkJ.png)

No sé cómo arreglar esto

numero 1: 10
numero 2: 5
se supone que numero 10 es mayor que 5
pero el batch no lo detecta. ayuda por favor.


Título: Re: Intercambiar valores de dos variables (batch) --ayuda--
Publicado por: juntacadaveres en 21 Abril 2019, 13:59 pm
Con este script que hice aparte si me funciono

Código
  1. @ECHO OFF
  2. SET NUM1=
  3. SET NUM2=
  4. SET /P NUM1="DAME UN NUMERO> "
  5. SET /P NUM2="DAME OTRO NUMERO> "
  6. IF %NUM1% GTR %NUM2% (
  7.    ECHO EL NUMERO %NUM1% ES MAYOR QUE %NUM2%
  8.    SET NUM1=%NUM2%
  9.    SET NUM2=%NUM1%
  10. )
  11. ECHO NUMERO1= %NUM1%
  12. ECHO NUMERO2= %NUM2%
  13. PAUSE>NUL

Lo que estropeaba el script eran las comillas 
"%NUM1%" GTR "%NUM2%"
alguien me puede decir por qué?
mi profesor siempre usa comillas en las variables...


Título: Re: Intercambiar valores de dos variables (batch) --ayuda--
Publicado por: EdePC en 21 Abril 2019, 17:50 pm
Saludos,

- Utilizar comillas implica comparar String (texto), en este caso se ordena de menor a mayor 0-9 A-Z a-z, por esto "a" < "b" y "10" < "5"

- Los operadores de comparación EQU, NEQ, LSS, LEQ, GTR, GEQ son usados para comparar números tal cual y los números no van entre comillas.


Título: Re: Intercambiar valores de dos variables (batch) --ayuda--
Publicado por: juntacadaveres en 21 Abril 2019, 21:25 pm
Saludos,

- Utilizar comillas implica comparar String (texto), en este caso se ordena de menor a mayor 0-9 A-Z a-z, por esto "a" < "b" y "10" < "5"

- Los operadores de comparación EQU, NEQ, LSS, LEQ, GTR, GEQ son usados para comparar números tal cual y los números no van entre comillas.


muchas gracias


Título: Re: Intercambiar valores de dos variables (batch) --ayuda--
Publicado por: Tachikomaia en 24 Abril 2019, 18:08 pm
Estom... lo más fácil es crear otra variable.
V = Num1
Num1 = Num2
Num2 = V

Quisiera probarlo por las dudas, pero si hay algo mal es cambiar algunas variables por otras o de orden.