2012-08-25 18 views
5

Tengo un bucle en un archivo por lotes que se parece a esto: aritmética dentro de un archivo por lotes de bucle

for %%y in (100 200 300 400 500) do (
    set /a x = y/25  
    echo %x% 
) 

La línea

:

set /a x = y/25 

no parece estar haciendo cualquier división . ¿Cuál es la sintaxis correcta para dividir cada y por 25? Solo necesito el resultado entero de esta división.

+0

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) –

Respuesta

10

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%% 
) 
1

No está haciendo nada porque "y" es solo una letra. Necesita signos de porcentaje para hacer referencia a la variable.

set /a x = %%y/25 
+0

Tienes razón acerca de que eres una carta. Pero poner los signos de porcentaje doble todavía no se divide. –

+0

@ dr-rk - Se divide, es su ECHO el que está fallando. Ver [mi respuesta] (http://stackoverflow.com/a/12118914/1012053) – dbenham

+0

['set/a' reconoce automáticamente las variables] (https://ss64.com/nt/set.html), no es necesario poner '%%' allí –

Cuestiones relacionadas