批量错误此时不会出现GOTO

时间:2015-03-13 14:41:03

标签: batch-file cmd

我正在使用记事本++批量编写程序,这是我的代码:

if %line1%==1 (
echo PLEASE ENTER THE PASSWORD TO CONTINUE
set /p password="PASSWORD:"
IF %PASSWORD%==%LINE2% GOTO PASSSUCCESS 
IF NOT %PASSWORD%==%LINE2% GOTO PASSERROR 
)
if %line1%==0 goto main menu

当我在cmd中运行上面的代码时,我收到以下错误:

此时不期待GOTO

请帮助

1 个答案:

答案 0 :(得分:0)

您正在一个块中设置和处理Password变量,因此您需要启用延迟扩展。这应该解决它:

SETLOCAL EnableDelayedExpansion

if %line1%==1 (
echo PLEASE ENTER THE PASSWORD TO CONTINUE
set /p password="PASSWORD:"
REM Note how Password is in delayed expansion notation below.
IF !PASSWORD!==%LINE2% GOTO PASSSUCCESS 
IF NOT !PASSWORD!==%LINE2% GOTO PASSERROR 
)
if %line1%==0 goto mainmenu

至于"为什么"您收到此错误:如果您没有延迟扩展,则解析器在解析块时不知道Password的值是什么,所以在执行时它看起来像这样:

echo PLEASE ENTER THE PASSWORD TO CONTINUE
set /p password="PASSWORD:"
IF ==<Line2Value> GOTO PASSSUCCESS 
IF NOT ==<Line2Value> GOTO PASSERROR

请注意Password应该为空的位置。这是因为在解析时不知道(再次在执行之前一次解析整个块)。通过启用延迟扩展,每行将基本上按顺序进行解析,以便在第二行中输入的值可用于块中的后续比较。