我正在进行进度计数器,但代码中有什么问题?这始终显示0%并关闭应用程序。
@echo off
set /a i=0
set /a limit=100
set /a percent=0
echo %percent% percent
:execute
set /a i+=1
ping 127.0.0.1 -n 1 > nul
set /a percent = %i%/%limit%
cls
echo %percent% percent
if %i% LSS %limit% (goto execute) else exit
答案 0 :(得分:2)
警告:变量定义的常见问题是变量名中包含空格:
set /a percent = %i%/%limit%
^
This space "can" be included in the name of the variable
虽然set /a
使用自己的解析器并将丢弃指定的空间,但set
命令备选方案的其余部分将创建名称中带有空格的变量。 "更好/更安全/推荐" 删除空间。
问题:批处理算法的工作原理。所有算术运算符只返回整数值。
set /a percent= %i% / %limit%
^
Batch arithmetic handle only integers
i/limit will be always 0 for any i < limit
更改为
set /a percent= i * 100 / limit
在这种情况下,不需要使用(当然可以使用{}}来获取变量值。如上所述,%i%
使用自己的解析器,它将解析检索到适当值的变量引用。