为什么我的批处理文件总是执行IF条件的ELSE分支?

时间:2019-02-04 00:24:57

标签: batch-file

我有一个名为name-code.bat的文件,正在用作该代码的用户名和密码。但是批处理文件始终输出该文件丢失的信息。

我曾尝试将name-code.bat从个人档案文件夹中移出,然后又移回所有位置,但是它仍然以else命令结尾。

@echo off
color 0a
cls
goto login-menu

:badlogin
cls
echo error that is not an available option

:login-menu
echo please input a # then press enter
echo --------------------------------------
echo.
echo 1 - sign in
echo 2 - sign up
echo 3 - exit
echo.
set /p log1=:
if %log1%==1 goto login
if %log1%==2 goto sign up
if %log1%==3 exit
goto badlogin

:sign up
cls
echo --------SIGN UP--------
echo.
set /p username= Enter a username: 
set /p password= Enter a password: 
(
    @echo off
    echo username: %username%
    echo password: %password%
)   > c:\users\Blaine\Desktop\profiles\%username%-%password%.bat
cls
goto login-menu

:login
cls
echo --------SIGN IN-------
echo.
set /p username= Username: 
set /p password= Password: 
if exist users\Blaine\Desktop\profiles\%username%-%password% (
    echo %username%-%password%.bat has been found
) ELSE (
    echo %username%-%password%.bat is missing
)
pause

我希望它输出name-code.bat has been found,但是它总是导致执行else分支并打印name-code.bat is missing到控制台。

1 个答案:

答案 0 :(得分:0)

我们将忽略因将用户名密码对放入文件名而导致的巨大,明显的安全漏洞。不要那样做从那里开始,我们也将忽略以纯文本存储密码的明显安全漏洞。也不要这样做。

也就是说,您的问题是创建文件时使用的名称与测试文件存在时使用的名称不同。

缺少的Equals()部分在您的测试中可能是无害的,因为您可能没有其他可用的驱动器。但是将它放在一个点而放在另一个点是不好的形式。

更大的问题是忘记在测试中包括C:\扩展名。

为更好地处理此问题,请在获得信息后立即将所需的文件名计算为一个变量,并在引用该名称的所有位置使用该变量。