Intercambiar valores de dos variables (batch) --ayuda--

Iniciado por juntacadaveres, 21 Abril 2019, 11:49 AM

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

juntacadaveres

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 (dos) [Seleccionar]
REM PERMUTAS LAS VARIBLES NUM. SI EL PRIMER NUMERO ES MAYOR CAMBIARLO A LA VARIABLE NUM2
IF "%NUM1%" GTR "%NUM2%" (
   SET VARTEMP=%NUM1%
   SET NUM1=%NUM2%
   SET NUM2=%VARTEMP%
)
   ECHO NUM1=%NUM1% VARTEMP=%VARTEMP% NUM2=%NUM2%


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 (dos) [Seleccionar]
@echo off
REM EJERCICIO 10
REM COMPROBAR SI EL QUE ABRE ESTE ARCHIVO ES ADMINISTRADOR O UN USUARIO SIN PERMISOS
NET SESSION >NUL 2>NUL
IF NOT ERRORLEVEL 1 (
    GOTO :INICIO
)
IF ERRORLEVEL 1 (
    ECHO NO TIENES PERMISOS PARA USAR ESTE ARCHIVO && PAUSE>NUL && EXIT
)
REM EMPEZAMOS
:inicio
SET NUM1=
SET NUM2=
SET NOMBRE=
CLS
echo ==================================
echo Creacion de usuarios automatizado
echo ==================================
echo.
set /p nombre="Nombre de usuario > "
IF "%NOMBRE%"=="" (
    ECHO DEBES EMPEZAR CON UNA CADENA DE TEXTO && PAUSE>NUL
    GOTO INICIO
)
REM PEDIR PRIMER NUMERO
:NUM1
set /p num1="Primer Numero > "
IF "%NUM1%"=="" (
    ECHO DEBES DARME UN NUMERO && PAUSE>NUL && GOTO :NUM1
)
set /a var=%num1%
IF NOT "%VAR%"=="%NUM1%" (
    ECHO DEBES DARME UN NUMERO && PAUSE>NUL && GOTO :NUM1
)
:NUM2
REM PEDIR SEGUNDO NUMERO
SET /P NUM2="Segundo Numero > "
IF "%NUM2%"=="" (
    ECHO DEBES DARME UN SEGUNDO NUMERO && PAUSE>NUL && GOTO :NUM2
)
set /a var2=%num2%
IF NOT "%VAR2%"=="%NUM2%" (
    ECHO DEBES DARME UN NUMERO && PAUSE>NUL && GOTO :NUM2
)
REM PERMUTAS LAS VARIBLES NUM. SI EL PRIMER NUMERO ES MAYOR CAMBIARLO A LA VARIABLE NUM2
IF "%NUM1%" GTR "%NUM2%" (
    SET VARTEMP=%NUM1%
    SET NUM1=%NUM2%
    SET NUM2=%VARTEMP%
)
    ECHO NUM1=%NUM1% VARTEMP=%VARTEMP% NUM2=%NUM2%


PAUSE>NUL

juntacadaveres

#1
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 (dos) [Seleccionar]
REM PERMUTAS LAS VARIBLES NUM. SI EL PRIMER NUMERO ES MAYOR CAMBIARLO A LA VARIABLE NUM2
IF "%NUM1%" GTR "%NUM2%" (
   SET NUM1=%NUM2%
   SET NUM2=%NUM1%
)


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


juntacadaveres

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

juntacadaveres

Hola al parecer todo funcionaba
hasta que meto como primer número un [10-19]
y como segundo numero uno menor a estos





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.

juntacadaveres

#4
Con este script que hice aparte si me funciono

Código (dos) [Seleccionar]
@ECHO OFF
SET NUM1=
SET NUM2=
SET /P NUM1="DAME UN NUMERO> "
SET /P NUM2="DAME OTRO NUMERO> "
IF %NUM1% GTR %NUM2% (
   ECHO EL NUMERO %NUM1% ES MAYOR QUE %NUM2%
   SET NUM1=%NUM2%
   SET NUM2=%NUM1%
)
ECHO NUMERO1= %NUM1%
ECHO NUMERO2= %NUM2%
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...

EdePC

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.

juntacadaveres

Cita de: 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.


muchas gracias

Tachikomaia

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.