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.