批处理脚本中缺少操作数

时间:2015-07-23 14:53:03

标签: windows batch-file batch-processing

我认为这是出现错误的部分。此代码片段位于for循环FYi中。

{{1}}

我该如何实现这个算术方程?

非常感谢!

2 个答案:

答案 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循环得到一个空行......