for循环批处理文件中的算术

时间:2012-08-25 03:04:20

标签: batch-file cmd

我在批处理文件中有一个for循环,如下所示:

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

该行:

set /a x = y/25

似乎没有进行任何划分。将每个y除以25的正确语法是什么?我只需要这个分区的整数结果。

3 个答案:

答案 0 :(得分:11)

不需要扩展环境变量以在SET / A语句中使用。但必须扩展FOR变量。

此外,即使您的计算有效,ECHO也会失败,因为在解析语句时会发生百分比扩展,并且会立即解析整个FOR构造。因此%x%的值将是执行循环之前存在的值。要获得在循环中设置的值,您应该使用延迟扩展。

此外,您应该在赋值运算符之前删除空格。您正在声明名称中带有空格的变量。

@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 :(得分:1)

它没有做任何事情因为“y”只是一封信。您需要百分号来引用变量。

set /a x = %%y/25

答案 2 :(得分:0)

我遇到了同样的问题,但结果是一个整数问题。除以后我一直在繁殖,但需要在之前。发生的事情是这样的: 1 / 100x100,其操作方式类似于1 \ 100 = 0,然后是0x100 = 0 我将其更改为 1x100 / 100,其操作方式类似于1x100 = 100,然后100/100 = 1

@echo off
setlocal ENABLEDELAYEDEXPANSION
for /f "usebackq" %%b in (`type List.txt ^| find "" /v /c`) do (
    set Count=%%b
    )
)
REM Echo !Count! -->Returns the correct number of lines in the file
for /F "tokens=*" %%A in (List.txt) do (
    set cName=%%A
    set /a Number+=1
    REM Echo !Number! -->Returns the correct increment of the loop
    set /a Percentage=100*!Number!/!Count!
    REM Echo !Percentage! -->Returns 1 when on the first line of a 100 line file
    set a=1
    set b=1000
    set /a c=100*1/100
    Rem -->echo c = !c! --Returns "C = 1"
)