[英]windows cmd batch file calculations
以下代码的输出仅重复“不平衡括号” x100。 如果我删除括号并留下%% i%5,它将仅循环1-100而没有mod。 如果我将其添加或减去,它将正常工作。 具体为什么找不到模组呢?
:MAIN
setlocal EnableDelayedExpansion
set result=0
for /L %%i in (1,1,100) do (
set /a result= (%%i%5)
echo !result!
)
endlocal
我还有其他代码,但似乎找不到问题。 如果输入非零数字,则可以正常工作。
@echo off
:MAIN
set /p number1= "Enter 1st number:”
if %number1%== "9" goto second_num
:second_num
set /p number2= “Enter 2nd number:”
if %number2%== “0” goto error
if %number2%== "9" goto division
:division
set /a result= (%number1%/%number2%)
echo %result%
pause
exit
:error
echo "Error. Cannot divide by 0. Start over."
goto MAIN
但是,如果第二个数字为0,则输出为:
Divide by zero error.
ECHO is off.
Press any key to continue...
当我按一个键时,程序结束,而不是:error。 我意识到if语句存在问题。 为什么说ECHO关闭了? 有人能指出我正确的方向吗?
set /a result= (%%i%5)
是你的问题。 FOR 将结束括号视为其结束括号,因此SET的括号不平衡。
将SET
的)
更改为^)
-脱字符号( ^
)转义)
告诉处理器它是set
的一部分,而不是for
在使用它时, %5
应该是%%5
因为奇怪的是, %
转义了%
,而不是^
并且需要告知处理器该%
不是%5
一部分-批处理文件的第五个参数。
下一个问题是由于不了解环境变量始终为字符串而引起的。 唯一需要加引号的时间是当它可能包含某些字符(例如SPACES)时。 if %var%==7
的语句if %var%==7
的字符串contents of var
与字符串7
进行比较,则您的语句将the contents of the variable
与"9"
(或其他值)进行比较。 这些绝不会平等。 现在- "%number2%"
可能相等,因为两个实际STRINGS可能相等。
如果ECHO
没有任何参数作为其“参数”,则它将报告其状态,即为ON或OFF。 由于由于尝试除以0的错误而未设置RESULT
,因此该语句归结为ECHO
因此已适当报告了回声状态。
解决方法是尝试ECHO.
-由于%result%设置为[nothing],该点使ECHO
可以咀嚼一些东西,并且会产生空白行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.