我和我的朋友很无聊,所以我们决定在BATCH中做一些编码,然后我们制作了一个基本的登录脚本。基本上,当您输入“Jack”作为用户时,它会要求输入密码,如果您输入“Pass”,则表示不正确,即使它不应该。奇怪的是,如果你输入错误的密码,它说的是正确的。
这是我的代码
@echo off
color 2
:A
cls
echo Welcome, Please Log In
set /p user=Please Enter A Username:
IF "%user%"=="Jack" (
set /p pass=Please Enter A Password:
IF "%pass%"=="Pass" (
goto :B
) ELSE (
echo Password Incorrect
ping 192.0.2.2 -n 1 -w 2000 > nul
goto :A
)
) ELSE (
echo Username Incorrect
ping 192.0.2.2 -n 1 -w 2000 > nul
goto :A
)
:B
cls
echo Hello %user%
:C
set /p cmd="%user%> "
if "%cmd%"=="exit" (
goto :EXIT
) ELSE (
echo Invalid Command.
goto :C
)
:EXIT
exit
答案 0 :(得分:4)
问题是%pass%
行IF "%pass%"=="Pass" (
的扩展
这会失败,因为在解析完整块时,甚至在执行一行之前,百分比扩展就会出现。
因此存在一种称为延迟扩展的模式,它将在执行时立即扩展。
@echo off
setlocal EnableDelayedExpansion
...
IF "%user%"=="Jack" (
set /p pass=Please Enter A Password:
IF "!pass!"=="Pass" (
答案 1 :(得分:2)
请参阅setlocal /?
了解EnableDelayedExpansion
标志。
答案 2 :(得分:0)
好吧我不知道EnableDelayedExpansion的内容是什么,但我设法修复它而不是在if语句中放入if语句我做了这个
title Some OS 1.0v
@echo off
color 2
:A
cls
echo Welcome, Please Log In
set /p user="Please Enter A Username: "
IF "%user%"=="Jack" (
set /p pass="Please Enter A Password: "
goto CheckPass
) ELSE (
echo Username Incorrect
ping 192.0.2.2 -n 1 -w 2000 > nul
goto A
)
:CheckPass
IF "%pass%"=="Pass" (
goto B
) ELSE (
echo Password Incorrect
ping 192.0.2.2 -n 1 -w 2000 > nul
goto A
)
:B
cls
echo Hello %user%
:C
set /p cmd="%user%> "
if "%cmd%"=="exit" (
goto EXIT
) ELSE (
goto cmd
)
:cmd
if "%cmd%"=="cmd" (
echo cmd : Shows list of commands
echo exit : Exits the program
goto C
) ELSE (
echo Invalid Command, For list of commands type "cmd".
goto C
)
:EXIT
exit