Cmd - goto错误

时间:2014-02-01 13:24:40

标签: batch-file cmd goto

我正在用批处理语言制作娱乐节目,但是有一个很大的错误:

@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%

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

此时,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 ...

但是 - GOTO例行程序call不是一个好主意。如果必须,goto :eof退出例程,否则你的流量控制将失控。

答案 1 :(得分:0)

更改此

if %input_bool%==1 goto ASKFORINPUT  

到这个

echo if %input_bool%==1 goto ASKFORINPUT  
pause

你会看到问题。