以下是代码:
:login
cls
if exist "%~dp0\Users" (
set /p enteredusername=Username:
if exist %~dp0\Users\%enteredusername%.bat ( call %~dp0\Users\%enteredusername%.bat ) else (
echo.
echo That user does not exist.
echo.
pause
goto mainmenu
)
) else (
echo No accounts exist.
echo.
pause
goto mainmenu
)
set /p enteredpass=Password:
if %enteredpass%==%password% ( goto begin ) else (
echo.
echo Incorrect password.
echo.
pause.
goto mainmenu
)
因此程序访问User文件夹中的批处理文件。无论用户名是什么,它都会被调用.bat。例如,如果他们注册的用户名是" Bob",则该文件将是Bob.bat。如果该文件存在,请调用它,设置用户名和密码变量。问题是:当我第一次使用此标签并提示输入用户名时,我输入" Bob"。它说这不存在(事实上它确实存在)。不过,这是一个好奇的部分。下次我运行它并键入" Bob",它会提示我输入密码,一切都很棒。它为什么这样做?谢谢。
答案 0 :(得分:0)
您在同一IF结构中使用%enteredusername%,因为它已定义。整个IF构造被LOADed(解析)为一行。所以如果你要添加一个像
这样的语句echo.enteredusername=%enteredusername%
在您设置它的'set / p ...'行之后,您会看到该变量为空。您可以启用delayedexpansion,但如果您的用户名或密码有“!”,则会出现问题。在里面。更安全的解决方案是重组这样的东西。显然,并非所有代码都显示在此处。
login
cls
if not exist "%~dp0\Users" (
echo No accounts exist.
echo.
pause
goto mainmenu
)
set /p enteredusername=Username:
if exist "%~dp0\Users\%enteredusername%.bat" ( call "%~dp0\Users\%enteredusername%.bat" ) else (
echo.
echo That user does not exist.
echo.
pause
goto mainmenu
)
set /p enteredpass=Password:
if "%enteredpass%"=="%password%" ( goto begin ) else (
echo.
echo Incorrect password.
echo.
pause.
goto mainmenu
)