Math 批处理:对从输入读取的数字进行加减运算
我有一个脚本文件,它接受一个介于1和5之间的数字,然后必须将该输入映射到另一个数字,以提供给程序。非常简单:如果它小于或等于2,减去1。高一点,加一个 以下是我剧本中的商业部分:Math 批处理:对从输入读取的数字进行加减运算,math,batch-file,addition,subtraction,Math,Batch File,Addition,Subtraction,我有一个脚本文件,它接受一个介于1和5之间的数字,然后必须将该输入映射到另一个数字,以提供给程序。非常简单:如果它小于或等于2,减去1。高一点,加一个 以下是我剧本中的商业部分: set /p reason=Reason code: if %reason%==q ( goto eof ) if %reason% GEQ 1 ( if %reason% LEQ 5 ( if %reason% LEQ 2 ( set /a code=%rea
set /p reason=Reason code:
if %reason%==q (
goto eof
)
if %reason% GEQ 1 (
if %reason% LEQ 5 (
if %reason% LEQ 2 (
set /a code=%reason%-1
) else (
set /a code=%reason%+1
)
echo %code%
)
)
我和后藤有一个循环。第一次迭代,按1。上面说echo关闭了。再次按1,它等于零,如预期的那样。按2,显示1。2同样,它说1,正如预期的那样
我已经确认,它一贯地说它应该从最后一个循环中获取输入(如果是第一个循环,则什么也没有)。每次按“q”退出都有效
在正确的地方回响,我确认它符合条件。这也是一个很好的理由。读取数字似乎没有问题,因为所有条件都按预期工作(因此,如果我按5,然后按6,它会阻止6,而不是认为我给了它5)
我有另一个脚本使用相同的算术运算,效果很好。除了变量的名称之外,我看不到这些行之间有任何区别(我之前将其设置回原因变量,但为了清楚起见更改为代码)。该问题是由您使用
%
变量引起的。这些变量在解析时展开,即当解释器读取指令时。条件语句作为一条指令读取,因此在读取%reason%GEQ 1(…)时,将展开%code%
。此时,最内层条件中的赋值尚未完成,因此%code%
仍然为空(直到条件处理完毕)。这就是为什么在第一次迭代后,ECHO处于关闭状态,之后每次都有一个值(实际上,您看到的是上一次迭代的代码)
启用延迟扩展并使用条件中code
变量的code>变量语法:
setlocal EnableDelayedExpansion
set /p "reason=Reason code: "
if "%reason%"=="q" goto :eof
if %reason% GEQ 1 (
if %reason% LEQ 5 (
if %reason% LEQ 2 (
set /a "code=%reason%-1"
) else (
set /a "code=%reason%+1"
)
echo !code!
)
)
如果你不想要!密码代码>要大于5,您需要修正逻辑,例如:
if %reason% GEQ 1 (
if %reason% LEQ 5 (
if %reason% LEQ 2 (
set /a "code=%reason%-1"
) else if %reason% EQU 5 (
set "code=%reason%"
) else (
set /a "code=%reason%+1"
)
echo !code!
)
)
另外,您需要goto:eof
,而不是goto-eof
。省略冒号将导致“缺少标签”错误。这对您有用吗
set /p reason=Reason code:
if "%reason%"=="q" goto :eof
if %reason% LEQ 2 set /a reason-=1
if %reason% GTR 2 set /a reason+=1
你确定你发布了完全相同的代码吗?您确定“echo is OFF”失败的测试用例是在尝试“1”时发生的吗?