因此,当我打开批处理工具并登录时,它就会崩溃。有谁知道为什么? 每当我提供不正确的凭据时,它都会显示“您输入的凭据不正确,请重试。” (这是正确的)但是每当我输入 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
答案 0 :(得分:1)
这并不是您问题的真正答案,但确实在底部包含了一个 Pause
命令,以防止它在通过 GUI 调用时关闭。
更多的是向您展示,无论何时您想要展示您的艺术/横幅,您都应该使用带有标签名称的 Call
命令。
下面的示例仅在必要时更改活动代码页,并且仅更改文件的横幅部分,将其返回到脚本其余部分的默认代码页。当您想在不显示横幅的情况下测试代码时,此方法也更简单,因为您只需在 Rem
行前面放置一个 Call :banner
ark,而不是该艺术的每个实例的每一行.
我还为 username
和 password
输入提示添加了三击规则。在我看来,这似乎是一个明智的想法,因为任何在 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