No es necesario ampliar las variables de entorno para utilizarlas en una instrucción SET/A. Pero las variables FOR se deben expandir.
Además, incluso si su computación funcionó, ECHO fallaría porque la expansión porcentual tiene lugar cuando se analiza una declaración, y toda la construcción FOR se analiza a la vez. Entonces, el valor de% x% sería el valor tal como existía antes de que se ejecute el ciclo. Para obtener el valor que se estableció dentro del ciclo, debe usar la expansión retrasada.
Además, debe eliminar el espacio antes del operador de asignación. Estás declarando una variable con un espacio en el nombre.
@echo off
setlocal enableDelayedExpansion
for %%A in (100 200 300 400 500) do (
set n=%%A
REM a FOR variable must be expanded
set /a x=%%A/25
REM an environment variable need not be expanded
set /a y=n/25
REM variables that were set within a block must be expanded using delayed expansion
echo x=!x!, y=!y!
REM another technique is to use CALL with doubled percents, but it is slower and less reliable
call echo x=%%x%%, y=%%y%%
)
DOS no tiene '' para el cálculo de bucles y matemáticas. Solo Windows CMD lo hace. [Son completamente diferentes] (http://superuser.com/q/451432/241386) –