Título: [Batch] (IF diferencia equ y == ) (SET /A Diferencia entre %v% y v) Publicado por: 0x0309 en 2 Mayo 2009, 21:44 pm En SET /A dentro de una expresión pueden utilizarse los nombres de variables sin los % % a cada costado.
Ejemplo: Código: set cincuenta=50 Código: numero1: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 Código: n1:0 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= y se recibe un mensaje de error. Ahora si se hace: Código: set /p numero=ingrese numero: Una óptima solución es: Código: (set 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 Código: set n=3 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 Código: set ocho=08 Puede hacerse lo siguiente: Código: set ocho=08 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 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. Título: Re: [Batch] (IF diferencia equ y == ) (SET /A Diferencia entre %v% y v) Publicado por: M a t t en 2 Mayo 2009, 22:48 pm Interesante 0x0309, no se me había ocurrido.
|