批处理If语句在检查密码时不起作用

时间:2013-11-05 19:54:17

标签: batch-file

我和我的朋友很无聊,所以我们决定在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

3 个答案:

答案 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