我在一个批处理文件中有一个 for 循环,如下所示:
for %%y in (100 200 300 400 500) do (
set /a x = y/25
echo %x%
)
该行:
set /a x = y/25
似乎没有进行任何划分。将每个 y 除以 25 的正确语法是什么?我只需要这个除法的整数结果。
我在一个批处理文件中有一个 for 循环,如下所示:
for %%y in (100 200 300 400 500) do (
set /a x = y/25
echo %x%
)
该行:
set /a x = y/25
似乎没有进行任何划分。将每个 y 除以 25 的正确语法是什么?我只需要这个除法的整数结果。
无需扩展环境变量即可在 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%%
)
它什么也没做,因为“y”只是一个字母。您需要百分号来引用变量。
set /a x = %%y/25
我遇到了同样的问题,但结果是一个整数问题。我在除法后乘法,但之前需要。发生的事情是这样的: 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"
)