缺少批处理操作员,不知道为什么

时间:2016-12-01 02:43:01

标签: batch-file

我一直在编写一个基于文本的口袋妖怪战斗,它一直告诉我,我有一个失踪的操作员。这是脚本我把它缩小到了。

set /a attacks=%random% * 3 / 32768 + 1
if %attacks%==1 set /a %ph%==%ph% - %random% * 10 / 32768 + 1
if %attacks%==2 set /a %ph%==%ph% - %random% * 30 / 32768 + 1
if %attacks%==3 set /a %ph%==%ph% - %random% * 50 / 32768 + 1
if %attacks%==3 echo Squirtle used water bolt!
if %attacks%==2 echo Squirtle used Tackle!
if %attacks%==1 echo Squirtle used Water Pulse!

任何帮助表示赞赏!谢谢!

1 个答案:

答案 0 :(得分:0)

正如SomethingDark所说,您将要使用set /a ph=。请注意,有一个等号,这意味着"得到值",而不是两个等号,它与if一起使用,意味着"等于?" (作为比较)。此外,您通过设置%ph%=...所做的是设置一个与变量ph名称相同的新变量。换句话说,如果将ph设置为1,则您将一个名为1的变量设置为数学运算的结果。或者,如果ph为空,那么您可能正在获得Missing操作数(我认为这就是您的意思)。无论哪种方式,我都确定这不是你想要的。

此格式适用:

if %attacks%==1 set /a ph=%ph% - %random% * 10 / 32768 + 1

我还有一些建议。

首先,它可能是一种风格选择,但我喜欢随机使用mod(%)运算符。它使阅读更容易。像这样:

set /a ph=%ph% - %random% %% 10 + 1

这个(%% 10部分)选择一个介于0和9之间的数字,然后+ 1使其为1到10,使用模运算(除以数字,然后返回余数) 。它更容易阅读IMO。请注意,您只需要批处理文件中的双%%。在cmd中,只需使用%

其次,当使用与if的比较时,如果你的一个操作数是空的,它将终止你的脚本。相反,用引号括住操作数,所以即使是一个空变量也不会破坏你的脚本。如果您的变量从不为空,则不是严格要求,但可能值得这样做。

if "%attacks%"=="3" echo Squirtle used water bolt!

我希望有所帮助。