批处理:命令的语法不正确

时间:2014-09-14 23:16:51

标签: batch-file if-statement syntax-error

我最近开始尝试进行"登录"在bacth中使用一些变量和if语句。发生的事情是当我在CMD中运行此代码并尝试在没有用户名或密码的情况下登录时,它应该将我带到标签" FAIL"但它却给了我错误"命令的语法不正确。"虽然这并没有告诉我哪些线路搞砸了,但我认为它发现了" LOGIN"中的IF / ELSE语句有问题。标签。看看我,看看你是否能弄清楚我做错了什么。

@ECHO off
SET /P CHOICE=Do you have a username/password? Y/N
IF %CHOICE%==y (
    GOTO LOGIN
)
IF %CHOICE%==Y (
    GOTO LOGIN
)
IF %CHOICE%==n (
    GOTO SIGNUP
)
IF %CHOICE%==N ( 
    GOTO SIGNUP
)
:SIGNUP
CLS
ECHO Please choose your username/password below
SET /P USER1=Username:
SET /P PASS1=Password:
CLS
ECHO Your log-in credentials should be set now
SET /P CHOICE=Do you want to log-in? Y/N
IF %CHOICE%==y (
    GOTO LOGIN
)
IF %CHOICE%==Y (
    GOTO LOGIN
)
IF %CHOICE%==n (
    GOTO END
)
IF %CHOICE%==N ( 
    GOTO END
)
:LOGIN
CLS
ECHO Please type in your username/password below
SET /P USER2=Username:
SET /P PASS2=Password:
IF EXIST %USER1% (
    IF %USER2%==%USER1% (
        GOTO SUCCESS
    ) ELSE (
        GOTO FAIL
    )
) ELSE (
    GOTO FAIL
)
IF EXIST %PASS1% (
    IF %PASS2%==%PASS1% (
        GOTO SUCCESS
    ) ELSE (
        GOTO FAIL
    ) 
) ELSE (
    GOTO FAIL
)
:SUCCESS
CLS
ECHO You have been successfully logged in
ECHO.
ECHO Press any key to continue
PAUSE>NUL
GOTO END
:FAIL
CLS
ECHO The username/password you entered was incorrect or does not exist
ECHO.
SET /P RETRY=Try again? Y/N
IF %RETRY%==y (
    GOTO LOGIN
)
IF %RETRY%==Y (
    GOTO LOGIN
)
IF %RETRY%==n (
    GOTO END
)
IF %RETRY%==N (
    GOTO END
)
:END
CLS
ECHO Press any key to exit
PAUSE>NUL

1 个答案:

答案 0 :(得分:3)

这是我使用的技巧,虽然它有点奇怪:

IF "%USER1%"=="%USER2%" (REM Do stuff...)

对于输入bobbob,它解析为:

IF "bob"=="bob" (REM Do stuff...)

对于输入bobjoe,它解析为:

IF "bob"=="joe" (REM Do stuff...)

对于输入joe,它解析为:

IF ""=="joe" (REM Do stuff...)

你也可以测试这样的空输入:

IF "%USER1%"=="" (Echo Please enter something.)

IF语句因为收到IF ==joe而没有任何内容而抱怨,这是语法错误。


另外,我注意到你正在做IF EXIST %Pass1%,这是不正确的。根据{{​​1}}中的文档:

  

EXIST filename如果指定的文件名存在,则指定true条件。

您(似乎是)使用它来检查变量是否已定义。你用if /?执行此操作(如前所述)。


作为次要注释(虽然我未在下面对其进行更正),但您可以IF "%VAR1%"=="%VAR2%"执行不区分大小写的检查(IE匹配if /I "%str1%"=="y"y )这样你就不需要冗余代码了。


这里的整个脚本格式化为:

Y