为什么在批处理中使用SET / a时会丢失运算符?

时间:2017-06-01 17:42:19

标签: windows batch-file

我的代码行是:

SET /A 327761=%RANDOM% * 1000 / 32768 + 1  

我只是错过了操作员错误。我不明白这是怎么回事,而这里的其他问题也无济于事。

2 个答案:

答案 0 :(得分:0)

因为没有人决定发布答案,所以感谢@SomethingDark

您不能只将数字作为变量名称。所以我在变量的开头添加了一个字符C

答案 1 :(得分:0)

虽然命名一个以数字开头的变量是一个坏主意,但是在尝试检索值时通常会出现问题,而不是在设置它时。也就是说,做

没有任何问题
set "1234=some value"

由于%1234%被解析为%1(批处理文件的第一个参数),后跟字符串234%

,因此您将在以后检索该值时遇到问题

但如上所述,您可以设置值。那么,为什么类似set /a "1234=1+1"之类的东西会引发错误呢?

原因是cmd中的命令首先被解析以确定要执行的命令,但在某些情况下,一旦识别出命令,其余的工作就被委托给特定于命令的解析器。 for命令是此行为的一个示例,但set /a也有自己的解析器。

set /a解析器不仅处理var=value语法。你也可以做像

这样的事情
 set /a 123+123

检索calc的结果,不将其存储在任何地方。

set /a解析器将其参数作为一系列数值/算术/逻辑/位/赋值操作数/运算符处理。 =只是一个赋值运算符,此运算符需要左侧的操作数为变量名。

问题是set /a解析器优先于变量名的数字操作数:如果它以数字开头,则它是一个数字操作数。在您的情况下,set /a 327761=....327761字面值将作为数字操作数处理,而不是作为变量名称处理,并且赋值运算符无法将值分配给其他值。