登录时批处理工具崩溃

时间:2021-02-07 16:23:18

标签: batch-file

因此,当我打开批处理工具并登录时,它就会崩溃。有谁知道为什么? 每当我提供不正确的凭据时,它都会显示“您输入的凭据不正确,请重试。” (这是正确的)但是每当我输入 user = root 和 pass = root 时,它都会关闭/崩溃我的批处理文件。

@echo off
chcp 65001 >nul
:login
cls
color D
title Multi Tool
echo.
REM echo ██████╗ ██╗      ██████╗  ██████╗ ███╗   ███╗███████╗
REM echo ██╔══██╗██║     ██╔═══██╗██╔═══██╗████╗ ████║██╔════╝
REM echo ██████╔╝██║     ██║   ██║██║   ██║██╔████╔██║███████╗
REM echo ██╔══██╗██║     ██║   ██║██║   ██║██║╚██╔╝██║╚════██║
REM echo ██████╔╝███████╗╚██████╔╝╚██████╔╝██║ ╚═╝ ██║███████║
REM echo ╚═════╝ ╚══════╝ ╚═════╝  ╚═════╝ ╚═╝     ╚═╝╚══════╝  
REM echo.          
echo Login here
echo.
set /p user=Enter username:
echo.
set /p pass=Enter password:
if %user% == root if %pass% == root goto main
echo.
echo The credentials you entered are incorrect, try again.
timeout 3 >nul
goto login
:main
cls
REM echo.
REM echo ██████╗ ██╗      ██████╗  ██████╗ ███╗   ███╗███████╗
REM echo ██╔══██╗██║     ██╔═══██╗██╔═══██╗████╗ ████║██╔════╝
REM echo ██████╔╝██║     ██║   ██║██║   ██║██╔████╔██║███████╗
REM echo ██╔══██╗██║     ██║   ██║██║   ██║██║╚██╔╝██║╚════██║
REM echo ██████╔╝███████╗╚██████╔╝╚██████╔╝██║ ╚═╝ ██║███████║
REM echo ╚═════╝ ╚══════╝ ╚═════╝  ╚═════╝ ╚═╝     ╚═╝╚══════╝  
REM echo.
echo Welcome to the main tool

1 个答案:

答案 0 :(得分:1)

这并不是您问题的真正答案,但确实在底部包含了一个 Pause 命令,以防止它在通过 GUI 调用时关闭。

更多的是向您展示,无论何时您想要展示您的艺术/横幅,您都应该使用带有标签名称的 Call 命令。

下面的示例仅在必要时更改活动代码页,并且仅更改文件的横幅部分,将其返回到脚本其余部分的默认代码页。当您想在不显示横幅的情况下测试代码时,此方法也更简单,因为您只需在 Rem 行前面放置一个 Call :bannerark,而不是该艺术的每个实例的每一行.

我还为 usernamepassword 输入提示添加了三击规则。在我看来,这似乎是一个明智的想法,因为任何在 3 次尝试中都无法正确解决的最终用户可能不应该使用它。

@Echo Off
SetLocal EnableExtensions
Title Multi Tool
Color 0D
GoTo login

:banner
For /F "Delims==" %%G In ('"(Set _cp) 2> NUL"') Do Set "%%G="
For /F Tokens^=* %%G In ('"%SystemRoot%\System32\chcp.com"') Do For %%H In (%%G
) Do Set "_cp=%%~nH"
If Not %_cp% Equ 65001 (Set "_cpc=TRUE"
    "%SystemRoot%\System32\chcp.com" 65001 1> NUL)
Echo=
Echo ██████╗ ██╗      ██████╗  ██████╗ ███╗   ███╗███████╗
Echo ██╔══██╗██║     ██╔═══██╗██╔═══██╗████╗ ████║██╔════╝
Echo ██████╔╝██║     ██║   ██║██║   ██║██╔████╔██║███████╗
Echo ██╔══██╗██║     ██║   ██║██║   ██║██║╚██╔╝██║╚════██║
Echo ██████╔╝███████╗╚██████╔╝╚██████╔╝██║ ╚═╝ ██║███████║
Echo ╚═════╝ ╚══════╝ ╚═════╝  ╚═════╝ ╚═╝     ╚═╝╚══════╝
Echo=
If Defined _cpc ("%SystemRoot%\System32\chcp.com" %_cp% 1> NUL
    For /F "Delims==" %%G In ('Set _cp') Do Set "%%G=")
Exit /B

:login
ClS
Call :banner
Echo Login here.
Set "i=0"
Echo=

:getuser
Set /A i += 1
Set "user="
Set /P "user=Enter username: "
Set "user=%user:"=%"
If /I Not "%user%" == "root" If %i% Lss 3 (GoTo getuser
) Else (Echo=
    Echo The username you entered is incorrect, exiting.
    %SystemRoot%\System32\timeout.exe /T 3 1> NUL
    GoTo :EOF)
Set "i=0"
Echo=

:getpass
Set /A i += 1
Set "pass="
Set /P "pass=Enter password: "
Set "pass=%pass:"=%"
If /I Not "%pass%" == "root" If %i% Lss 3 (GoTo getpass
) Else (Echo=
    Echo The credentials you entered are incorrect, try again.
    %SystemRoot%\System32\timeout.exe /T 3 1> NUL
    GoTo login)
Set "i="
Echo=

:main
ClS
Call :banner
Echo Welcome to the main tool.
Echo=

Pause