我正在用批处理语言制作娱乐节目,但是有一个很大的错误:
@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%
?
任何帮助将不胜感激。
答案 0 :(得分:2)
此时,input_bool
将是未定义的,所以
if %input_bool%==1 goto ASKFORINPUT
解析为
if ==1 goto ASKFORINPUT
IF
语法是if
string1 operator string2 action。
string1是==1
;运算符是goto
。 goto
不是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
你会看到问题。