我认为这是出现错误的部分。此代码片段位于for循环FYi中。
{{1}}
我该如何实现这个算术方程?
非常感谢!
答案 0 :(得分:2)
正如其他人所说,解决问题的方法之一就是推迟扩张。
您的实际代码必须类似于:
for ... in (...) do (
set size=...
set free=...
set /a Used=%Size% - %Free%
set /a Percentage=100 * %Used% / %Size%
)
解析行时问题是%size%
,%free%
和%used%
,并且在一次传递中解析整个for循环(也就是任何带括号的块),在循环执行之前。所以它们会扩展到执行循环之前存在的值,在你的情况下可能是空的。
一种解决方案是使用延迟扩展,这在执行时发生。必须在使用之前启用延迟扩展。
setlocal enableDelayedExpansion
for ... in (...) do (
set size=...
set free=...
set /a Used=!Size! - !Free!
set /a Percentage=100 * !Used! / !Size!
)
但是,如果您只是进行SET / A计算,则没有必要这样做,因为SET / A命令知道如何在不执行此操作的情况下扩展变量。此外,多个计算可以在一行上连接,其间有逗号。请注意,自动扩展和连接分配仅适用于/ A选项。
for ... in (...) do (
set size=...
set free=...
set /a "Used=Size-Free, Percentage=100*Used/Size"
)
您仍有潜在问题,该批次仅支持整数。小数部分将被截断。但是你可能想要将小数部分向上舍入。例如,45.7的百分比将报告为45,但您可能希望将其四舍五入为46.以下公式可用于获得正确的舍入百分比:
set /a "Used=Size-Free, Percentage=(1000*Used/Size+5)/10"
答案 1 :(得分:1)
请发送for循环,问题似乎来自它。您发送的代码没有任何问题。但我知道它是什么:
1 Missing Operand
表示:其中一个等式的操作数缺失
2现在你知道了:其中一个变量是空的
3取消设置@echo off
,将其删除。所以你可以看到价值丢失的地方
4不要忘记pause
提示:有时for循环得到一个空行......