2012-08-25 9 views
5

Ho un ciclo for in un file batch che assomiglia a questo:aritmetica all'interno di un file batch per ciclo

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

La linea:

set /a x = y/25 

non sembra di fare qualsiasi divisione . Qual è la sintassi corretta per dividere ogni y per 25? Ho solo bisogno del risultato intero di questa divisione.

+0

DOS non ha l'abilità di calcolo "per" ciclo e matematica. Solo Windows CMD. [Sono completamente diversi] (http://superuser.com/q/451432/241386) –

risposta

10

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

Non sta facendo nulla perché "y" è solo una lettera. Hai bisogno di segni di percentuale per fare riferimento alla variabile.

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

Hai ragione riguardo alla tua lettera. Ma mettere la doppia percentuale di segni ancora non si divide. –

+0

@ dr-rk - Si divide, è il tuo ECHO che sta fallendo. Vedi [la mia risposta] (http://stackoverflow.com/a/12118914/1012053) – dbenham

+0

['set/a' riconosce automaticamente le variabili] (https://ss64.com/nt/set.html), non c'è bisogno di metti '%%' lì –

Problemi correlati