我正在尝试编写一个Windows批处理文件,如果第二个数字为0,则实现两个除法并带有一些错误捕获。如果用户为任一个数字输入55,它应该转到一个循环,找到总数量从1-100 mod 5,+ 3计算每个数字的所有结果 循环结束后,它应该显示所有结果的平均值并将它们附加到txt文件。
当我尝试分裂时,屏幕弹出并消失。如果我输入55,永远不会到达循环。感谢任何帮助,谢谢!
:FORLOOP
cls
PAUSE
SET COUNTER=0
SET MODNUM=5
SET ADDNUM=3
SET RESULT=0
SET TOTAL=0
SET AVG=0
GOTO LOOP
:LOOP
SET /A COUNTER=COUNTER+1
SET /A "RESULT=((%LOOP% %% %MODNUM%) + %ADDNUM%)"
ECHO %COUNTER% MOD %MODNUM% PLUS %ADDNUM% IS %RESULT%
SET /A "TOTAL=%TOTAL% + %RESULT%"
IF %COUNTER%==100
GOTO AVG
:AVG
ECHO.
SET /A "AVERAGE=(%TOTAL% / 100)"
ECHO AVERAGE OF RESULTS IS %AVG%
ECHO.
@ECHO AVERAGE OF RESULTS IS %AVG% >> results.txt
GOTO EXITLOOP
:EXITLOOP
PAUSE EXIT /B
答案 0 :(得分:0)
没有自己尝试,看起来就像你到达:AVG来自:LOOP,它然后落入:EXITLOOP,退出批次。
答案 1 :(得分:0)
在使用之前,您没有设置%loop%。
C:\Users\me>SET /A "RESULT=(( % 5) + 3)"
Missing operand.
这意味着3行之后会出现语法错误:
IF %LOOP%==100
因为
而爆炸IF ==100
语法无效。
您的意思是使用%COUNTER%而不是%LOOP%吗?
调试时,请删除你的''命令,以便您可以看到您的错误
您还可以从cmd.exe窗口运行脚本,然后在脚本结束时输出不会消失。
如果用%COUNTER%替换%LOOP%的两个实例,然后修复另一个语法错误,其中有一个换行符
IF %COUNTER%==100
和
GOTO AVG
然后至少它完成没有错误。我会让您确定它是否正常工作。
答案 2 :(得分:0)
我会将你的逻辑检查为零,超过55的逻辑检查。除以零比55检查更危险。在对数据进行任何操作之前,请确保数据首先有效。
似乎也无法回头:AVG。它之后只退出批处理文件。
答案 3 :(得分:0)
你做错了。
首先,你要设置一个名为AVERAGE而不是AVG的变量,所以AVG总是为0.其次,你在IF NOT %SECONDNUM%==55 GOTO DIVISON
另外,正如LinuxDisciple在他的回答中提到的那样,批处理文件是逐行解释的,因此你不能将你的if和goto放在两个不同的行上。
最后,你有一些错误的逻辑。我想你正试图这样做:
@echo off
@ECHO Carlos Deleon >> results.txt
@ECHO %date% %time% >> results.txt
:MAIN
cls
:FIRSTNUM
ECHO.
ECHO ENTER FIRST NUMBER
SET /P FIRSTNUM=Enter a number and press ENTER :
IF %FIRSTNUM%==55 GOTO FORLOOP
GOTO SECONDNUM
:SECONDNUM
ECHO.
ECHO ENTER SECOND NUMBER
SET /P SECONDNUM=Type a different number and press enter :
IF %SECONDNUM%==55 GOTO FORLOOP
IF %SECONDNUM%==0 GOTO ASKAGAIN
IF NOT %SECONDNUM%==55 GOTO DIVISION
IF NOT %SECONDNUM%==0 GOTO DIVISION
:ASKAGAIN
ECHO.
ECHO INVALID ENTRY, CANNOT DIVIDE BY ZERO, ENTER TWO NEW NUMBERS
GOTO FIRSTNUM
:DIVISION
ECHO.
SET /A RESULT=%FIRSTNUM% / %SECONDNUM%
ECHO %FIRSTNUM% divided by %SECONDNUM% is %RESULT%
@ECHO %FIRSTNUM% divided by %SECONDNUM% is %RESULT% >> results.txt
GOTO FIRSTNUM
:FORLOOP
cls
PAUSE
SET COUNTER=0
SET MODNUM=5
SET ADDNUM=3
SET RESULT=0
SET TOTAL=0
SET AVG=0
GOTO LOOP
:LOOP
SET /A COUNTER=COUNTER+1
SET /A "RESULT=((%COUNTER% %% %MODNUM%) + %ADDNUM%)"
ECHO %COUNTER% MOD %MODNUM% PLUS %ADDNUM% IS %RESULT%
SET /A "TOTAL=%TOTAL% + %RESULT%"
IF %COUNTER% lss 100 GOTO LOOP
:AVG
ECHO.
ECHO %TOTAL%
SET /A "AVG=(%TOTAL% / 100)"
ECHO AVERAGE OF RESULTS IS %AVG%
ECHO.
@ECHO AVERAGE OF RESULTS IS %AVG% >> results.txt
GOTO EXITLOOP
:EXITLOOP
PAUSE EXIT /B
请注意,如果lss意味着它在COUNTER小于100的情况下保持循环,这就是你正在尝试的,而不是只有在COUNTER已经为100时才循环