2014-09-14 2 views
4

Я недавно начал пытаться сделать «логин» в bacth, используя некоторые переменные и операторы if. Что случилось, когда я запускаю этот код в CMD, и я пытаюсь войти в систему, не сделав имя пользователя или пароль, он должен привести меня к ярлыку «FAIL», но вместо этого он дает мне ошибку «Синтаксис команды неверен. " Хотя это не говорит мне, какие строки я испортил, я думаю, что он обнаружил проблему с утверждениями IF/ELSE на ярлыке «LOGIN». Взгляните на меня, посмотрите, можете ли вы понять, что я делаю неправильно.Пакет: Синтаксис команды неверен

@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 

ответ

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, который является синтаксической ошибкой.


Aditionally, я заметил, что вы делали IF EXIST %Pass1%, что не является правильным. По документации в if /?:

EXIST filename Задает истинное условие, если указанное имя файла существует.

Вы, по-видимому, используете это, чтобы проверить, определена ли переменная. Вы делаете это (как я уже говорил) с IF "%VAR1%"=="%VAR2%".


В минорной ноте (хотя я не исправил его ниже), вы можете сделать if /I "%str1%"=="y" сделать регистронезависимые проверки (IE он соответствует как y и Y), так что вам не нужен избыточному код ,


Вот весь ваш сценарий отформатирован вести себя так:

@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 "%USER2%"=="%USER1%" (
    GOTO SUCCESS 
) ELSE (
    GOTO FAIL 
) 
IF "%PASS2%"=="%PASS1%" (
    GOTO SUCCESS 
) 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

Эта часть кода не будет проблемой, хотя, потому что ошибка синтаксиса приходит только после ввода в имени пользователя и пароля при нет имени пользователя и пароля. Все остальное работает, кроме инструкций IF/ELSE на ярлыке «LOGIN». –

+0

Правильно, я использовал неправильную часть в качестве примера. Хотя, по-моему, ошибка все равно возникнет, если вы не внесете туда вход. Вместо этого я обновляю свой тент, чтобы использовать эту область. – Pokechu22

+0

@LarsKloosterman Я только что обновил свой тент, чтобы быть более логичным и включить полный пересмотренный код. Попробуйте. – Pokechu22

Смежные вопросы