Ejemplo:
Código:
set cincuenta=50
set /a numero1=cincuenta
set /a numero2=%cincuenta%
echo.numero1:%numero1%
echo.numero2:%numero2%
Código:
numero1:50
numero2:50
En este caso se produce exactamente el mismo resultado. Sin embargo, en determindas situaciones esto puede ser diferente.
ejemplo:
Código:
set n=5
set c=n
set /a n1=c
set /a n2=%c%
echo.n1:%n1%
echo.n2:%n2%
Código:
n1:0
n2:5
Código:
set /a n2=%c%
Código:
set /a n2=n
En cambio:
Código:
set /a n1=c
Esto demuestra que puede ser mejor escribir las variables dentro de set/a con las % al costado.
Aún así, escribir las variables dentro de set/a sin % puede ser útil para lo siguiente:
Código:
set /p numero=ingrese numero:
set /a numero=%numero%
set /a numero=
y se recibe un mensaje de error.
Ahora si se hace:
Código:
set /p numero=ingrese numero:
set /a numero=numero
Una óptima solución es:
Código:
(set numero=)
set /p numero=ingrese numero:
if not defined numero set numero=0
set /a numero=%numero%
Escribir las variables sin % también, puede traer un problema, que es que se pierde la notación hexadecimal y octal, es decir:
No se puede hacer:
Código:
set n=3
set /a numero1=0xn
set /a numero2=0n
Código:
set n=3
set /a numero1=0x%n%
set /a numero2=0%n%
Algo útil que se pierde también con perder la notación hexadecimal y octal es una solución para el típico problema de asignar 08 o 09 a un set /a , que no se puede porque en notación octal no existe el 8 ni el 9, y que consiste en hacer lo siguiente:
Anteponer 0x.
08 no es un número válido
09 no es un número válido
Así:
0x08 es un número válido
0x09 es un número válido
Código:
set ocho=08
set n=0x%ocho%
Código:
set ocho=08
set /a n=0xocho
Puede hacerse lo siguiente:
Código:
set ocho=08
set nueve=09
if %ocho% equ 8 set ocho=8
if %nueve% equ 9 set nueve=9
Código:
set /a n=ocho
Nota: debe ser con la variable no encerrada entre comillas y con equ. No es lo mismo == que equ, pues == compara cadenas, es equivalente a equ con comillas.
Para comparar números debe hacerse como lo mostré, de lo contrario se toma como cadenas.
Demostración:
Código:
@echo off
set n=5
if %n%==5 echo 1
if %n%==05 echo 2
if %n%==0x5 echo 3
if "%n%"=="5" echo 4
if "%n%"=="05" echo 5
if "%n%"=="0x5" echo 6
if /i "%n%"=="5" echo 7
if /i "%n%"=="05" echo 8
if /i "%n%"=="0x5" echo 9
if %n% equ 5 echo 10
if %n% equ 05 echo 11
if %n% equ 0x5 echo 12
if "%n%" equ "5" echo 13
if "%n%" equ "05" echo 14
if "%n%" equ "0x5" echo 15
if /i "%n%" equ "5" echo 16
if /i "%n%" equ "05" echo 17
if /i "%n%" equ "0x5" echo 18
pause
La única salida que demuestra una comparación númerica son la de las opciones 10,11,12, el resto son comparaciones de cadenas.
Nota: pareciera que con la opción /i se logra comparación númerica aún encerrando la variable y su comparación entre comillas, pero lo único que hace es no considerar los ceros iniciales.
Para usar equ se deben tener las extensiones de comando habilitadas.
Escrito por Carlos.





Autor


En línea
