我最近开始尝试进行"登录"在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
答案 0 :(得分:3)
这是我使用的技巧,虽然它有点奇怪:
IF "%USER1%"=="%USER2%" (REM Do stuff...)
对于输入bob
和bob
,它解析为:
IF "bob"=="bob" (REM Do stuff...)
对于输入bob
和joe
,它解析为:
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