Le variabili di ambiente non devono essere espanse per l'utilizzo in un'istruzione SET/A. Ma le variabili FOR devono essere espanse.
Inoltre, anche se il calcolo ha funzionato, l'ECHO fallirebbe perché l'espansione percentuale ha luogo quando un'istruzione viene analizzata e l'intero costrutto FOR viene analizzato in una volta. Quindi il valore di% x% sarebbe il valore così com'è esistito prima dell'esecuzione del ciclo. Per ottenere il valore impostato all'interno del ciclo, è necessario utilizzare l'espansione ritardata.
Inoltre, è necessario rimuovere lo spazio prima dell'operatore di assegnazione. Stai dichiarando una variabile con uno spazio nel nome.
@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 non ha l'abilità di calcolo "per" ciclo e matematica. Solo Windows CMD. [Sono completamente diversi] (http://superuser.com/q/451432/241386) –