Batch file 设置/a变量,变量变为0缺少运算符
我正在做一个游戏,对于Batch file 设置/a变量,变量变为0缺少运算符,batch-file,Batch File,我正在做一个游戏,对于set/a“var”,var变为0,并且缺少操作符 这是一段代码 如何解决此问题?打开命令提示窗口,运行set/?并读取控制台窗口中输出的所有帮助页面 选项/A用于算术表达式,不应用于为环境变量指定字符串值。环境变量始终为字符串类型 在线 set /a partner=Ignite Windows命令处理器将Ignite解释为环境变量的名称,将转换为整数值的字符串值分配给从整数转换回字符串的变量partner。由于很可能没有变量Ignite0,因此将值0作为字符串分配给p
set/a“var”
,var
变为0,并且缺少操作符
这是一段代码
如何解决此问题?打开命令提示窗口,运行
set/?
并读取控制台窗口中输出的所有帮助页面
选项/A
用于算术表达式,不应用于为环境变量指定字符串值。环境变量始终为字符串类型
在线
set /a partner=Ignite
Windows命令处理器将Ignite
解释为环境变量的名称,将转换为整数值的字符串值分配给从整数转换回字符串的变量partner
。由于很可能没有变量Ignite
0,因此将值0作为字符串分配给partner
在线
set /a move3=Flame Spread
Windows命令处理器将Flame
和Spread
解释为环境变量的名称。但是之间没有运算符,因此由于缺少运算符,算术表达式无效
解决方案:
@echo off
setlocal EnableDelayedExpansion
set "confirm=n"
set /P "confirm=y/n : "
if /I "!confirm!" == "y" (
set "partner=Ignite"
set "monsterlevel=5"
set "reqexp=100"
set "currentexp=0"
set "element=Fire"
set "evolution=Igneous"
set "move1=Scratch"
set "move2=Burn"
set "move3=Flame Spread"
set "move4=Quick Slash"
set "hp=100"
goto mymonster
)
if /I "!confirm!" == "n" goto pick
rem The user has entered whether y/Y nor n/N. What to do now?
如果批处理用户只点击RETURN或ENTER而没有输入任何内容,则环境变量confirm
使用默认值定义。在这种情况下,环境变量confirm
保持其当前值,或者如果之前未定义,则仍然未定义
字符串比较不区分大小写,因为IF选项/I
。在命令提示窗口中运行if/?
以获取有关此命令的帮助
字符串比较是使用延迟展开完成的。这是为了安全起见,因为批处理用户可能会错误地或有意地输入,例如
“为什么使用/a
?set/a partner=Ignite
将%partner%
设置为%Ignite%
的值,该值为空。设置/a move3=火焰蔓延
尝试将%move3%
设置为%Flame%[missing operator here]%Spread%
。/a
不是用于算术吗?这意味着不使用/a
应该可以解决问题吗?set/?
告诉您参数必须是一个数字值,但事实并非如此。您所说的“missing operator too”是什么意思?这是一条错误消息吗?
@echo off
setlocal EnableDelayedExpansion
set "confirm=n"
set /P "confirm=y/n : "
if /I "!confirm!" == "y" (
set "partner=Ignite"
set "monsterlevel=5"
set "reqexp=100"
set "currentexp=0"
set "element=Fire"
set "evolution=Igneous"
set "move1=Scratch"
set "move2=Burn"
set "move3=Flame Spread"
set "move4=Quick Slash"
set "hp=100"
goto mymonster
)
if /I "!confirm!" == "n" goto pick
rem The user has entered whether y/Y nor n/N. What to do now?