Si las extensiones de comando están habilitadas, SET cambia así: "Cuando se llama al comando SET solamente con un nombre ...

Si las extensiones de comando están habilitadas, SET cambia así:

"Cuando se llama al comando SET solamente con un nombre de variable, sin signo
de igual ni valor, se mostrarán los valores de todas las variables cuyos
prefijos coincidan con el nombre especificado como parámetro para el comando
SET. Por ejemplo:

    SET P

mostrará todas las variables que empiecen con la letra 'P'.

El comando SET establecerá ERRORLEVEL en 1 si no se encuentra el nombre
de la variable en el entorno actual.

El comando SET no permitirá que un signo de igual sea parte de una variable.

Se han agregado dos modificadores nuevos al comando SET:

    SET /A expression
    SET /P variable=[promptString]

El modificador /A especifica que la cadena a la derecha del signo de igual
es una expresión numérica que es evaluada. El evaluador de expresiones es
bastante simple y es compatible con las siguientes operaciones, en orden de
precedencia decreciente:

    ()                  - agrupar
    ! ~ -               - operadores unarios
    * / %%              - operadores aritméticos
    + -                 - operadores aritméticos
    << >>               - desplazamiento lógico
                       - bit a bit y
    ^                   - bit a bit exclusivo o
    |                   - bit a bit
    = *= /= %%= += -=   - asignación
      &= ^= |= <<= >>=
    ,                   - separador de expresión

Si se usa cualquiera de los operadores lógicos o de módulo, será
necesario escribir la cadena entre comillas. Cualquier cadena de la expresión
que no sea numérica, se tratará como variable de entorno cuyo valor se
convertirá a tipo numérico antes de usarse. Si se especifica una variable
que no está definida en el entorno actual, se usará el valor cero. Esto
permite hacer operaciones aritméticas con los valores de variables de entorno
evitando el escribir todos estos signos %% para obtener sus valores. Si se
ejecuta el comando SET /A desde la línea del comando fuera del
script, entonces se mostrará el valor final de la expresión. El operador
de asignación requiere un nombre de variable de entorno a la izquierda del
operador de asignación. Los valores numéricos son números decimales, a no ser
que lleven el prefijo 0x delante para los números hexadecimales, y 0 para los
números octales. De esta manera 0x12 es lo mismo que 18, y lo mismo que 022.
Nota: la notación octal puede ser confusa: 08 y 09 no son números válidos
porque 8 y 9 no son dígitos octales válidos.