Lot: la syntaxe de La commande est incorrecte
J'ai récemment commencé à essayer de faire un "login" dans bacth par l'utilisation de certaines variables et si les déclarations. Ce qui est arrivé lorsque j'exécute ce code dans CMD et j'essaie de me connecter sans avoir pris un nom d'utilisateur ou mot de passe, il doit m'apporter à l'étiquette de "non", mais plutôt qu'il me donne l'erreur "La syntaxe de la commande est incorrecte." Tout cela ne me dites pas ce que j'ai foiré, je pense que sa conclusion un problème avec le IF/ELSE dans la "CONNEXION" de l'étiquette. Avoir un regard pour moi, voir si vous pouvez comprendre ce que je fais mal.
@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
OriginalL'auteur Lars Kloosterman | 2014-09-14
Vous devez vous connecter pour publier un commentaire.
Voici l'astuce que j'utilise, mais c'est un peu bizarre:
Pour l'entrée
bob
etbob
, il se résout à ceci:Pour l'entrée
bob
etjoe
, il se résout à ceci:Pour l'entrée
etjoe
, il se résout à ceci:Vous pouvez également tester d'entrée vide comme ceci:
La
IF
déclaration a été se plaindre quand rien donné parce qu'il était arriverIF ==joe
, ce qui est une erreur de syntaxe.Aditionally, j'ai remarqué que vous faisiez
IF EXIST %Pass1%
, qui n'est pas correct. Par la documentation dansif /?
:Vous (semble être) à l'aide de ce pour vérifier si la variable est définie. Vous faire (comme je l'ai dit avant) avec
IF "%VAR1%"=="%VAR2%"
.Comme une note mineure (même si je n'ai pas le corriger ci-dessous), vous pouvez le faire
if /I "%str1%"=="y"
à faire de la casse de la vérification (c'est à dire qu'il correspond à la fois ày
etY
), de sorte que vous n'avez pas besoin de code redondant.Voici l'intégralité de votre script formaté à se comporter comme ceci:
À droite, j'ai utilisé la mauvaise partie comme un exemple. Si une erreur se produirait tout de même si vous a pas donné d'entrée, je pense. Je suis à jour de mes awnser à l'utilisation de la zone comme un exemple, au lieu de cela.
Je viens de mettre à jour mon awnser à être plus logique et comprennent la révision du code. De l'essayer.
Merci beaucoup, j'étais super fatigué de cette stupide fichier de commandes qui ne fonctionnent pas. La raison pour laquelle je pensais que c'était le IF/ELSE, c'est que normalement dans Notepad++, lorsque vous utilisez les crochets dans les états, il les met en valeur pour vous montrer qu'ils correspondent les uns aux autres, mais avec le RESTE des pièces, il n'a pas
OriginalL'auteur Pokechu22