【问题标题】:Cmd - goto errorCmd - 转到错误
【发布时间】:2014-02-01 13:24:39
【问题描述】:

我正在用批处理语言制作一个娱乐程序,但是有一个大错误:

@echo off  
echo SimpleCmd is loading......  
for /l %%i in (1,1,100000) do rem  
cls  
echo Loading end.  

:ASKFORINPUT  
set /p input=">>"  
call :LoCase input  
set input_bool=1  
findstr /i /r /c:"^[ ]*:%input%\>" "%~f0" >nul 2>nul && goto %input%  

::FUNCTION  

:system  
:system.menu  
echo ---------MENU---------  
echo ^| 1. System Command  ^|  
echo ^| 2. Back to Input   ^|  
if "%errorlevel%"=="1" (goto system.command)  
if "%errorlevel%"=="2" (goto ASKFORINPUT)  
:system.command  
set /p systemcommand="cmd>>"  
if %systemcommand%==simplecmd.back goto ASKFORINPUT  
%systemcommand%  
goto system.command  

:random  
:random.lowerlimit  
set /p lowerlimit="Insert Lower Limit (1-32767) : "  
if %lowerlimit% GTR 32767 (goto random.lowerlimit)  
if %lowerlimit% LSS 1 (goto random.lowerlimit)  
:random.upperlimit  
set /p upperlimit="Insert Upper Limit (2-32768) : "  
if %upperlimit% GTR 32768 (goto random.uppwerlimit)  
if %upperlimit% LSS 2(goto random.upperlimt)  
:random.generate  
set /a number.random=%random%*%upperlimit%/32768+%lowerlimit%  
goto ASKFORINPUT  

::FUNCTION -END  

::LOCASE  
:LoCase  
if %input_bool%==1 goto ASKFORINPUT  
set input=%input:Q=q%  
set input=%input:W=w%  
set input=%input:E=e%  
set input=%input:R=r%  
set input=%input:T=t%  
set input=%input:Y=y%  
set input=%input:U=u%  
set input=%input:I=i%  
set input=%input:O=o%  
set input=%input:P=p%  
set input=%input:A=a%  
set input=%input:S=s%  
set input=%input:D=d%  
set input=%input:F=f%  
set input=%input:G=g%  
set input=%input:H=h%  
set input=%input:J=j%  
set input=%input:K=k%  
set input=%input:L=l%  
set input=%input:Z=z%  
set input=%input:X=x%  
set input=%input:C=c%  
set input=%input:V=v%  
set input=%input:B=b%  
set input=%input:N=n%  
set input=%input:M=m%  
set input_bool=0  
::LOCASE -END  

这是一个简单的程序;但错误是:

这个时候Goto出乎意料

在我输入“system.command”并按下回车键后显示此消息。
我一遍又一遍地阅读这些行,但就是看不到问题。
这条线有什么问题吗:findstr /i /r /c:"^[ ]*:%input%\>" "%~f0" >nul 2>nul && goto %input%

任何帮助将不胜感激。

【问题讨论】:

    标签: batch-file cmd goto


    【解决方案1】:

    此时,input_bool 将是未定义的,所以

    if %input_bool%==1 goto ASKFORINPUT
    

    被解析为

    if ==1 goto ASKFORINPUT
    

    IF 语法是if string1 operator string2 action。

    string1 是==1;运营商是gotogoto 不是if 理解的运算符,所以吐槽了。

    你需要if "%possiblyemptyvariable%"=="1" goto ...

    但是 - 在 called 例程中 GOTO 不是一个好主意。 goto :eof 必须退出例程,否则您的流程控制将失控。

    【讨论】:

      【解决方案2】:

      改变这个

      if %input_bool%==1 goto ASKFORINPUT  
      

      到这里

      echo if %input_bool%==1 goto ASKFORINPUT  
      pause
      

      你会看到问题。

      【讨论】:

        猜你喜欢
        • 2016-06-11
        • 2014-06-08
        • 2013-07-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-15
        • 2019-02-04
        • 2015-04-12
        相关资源
        最近更新 更多