Windows批处理文件,分为两个数字,错误捕获为0

时间:2016-03-21 16:33:03

标签: windows batch-file

我正在尝试编写一个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

4 个答案:

答案 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

中拼错了DIVISION

另外,正如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时才循环