我的代码行是:
SET /A 327761=%RANDOM% * 1000 / 32768 + 1
我只是错过了操作员错误。我不明白这是怎么回事,而这里的其他问题也无济于事。
答案 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
字面值将作为数字操作数处理,而不是作为变量名称处理,并且赋值运算符无法将值分配给其他值。