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?