首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >登录时Batch tool崩溃

登录时Batch tool崩溃
EN

Stack Overflow用户
提问于 2021-02-08 00:23:18
回答 1查看 47关注 0票数 0

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

代码语言:javascript
复制
@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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-08 03:32:46

这并不是对您问题的真正回答,但在底部包含了一个Pause命令,以防止在通过图形用户界面调用时关闭该命令。

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

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

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

代码语言:javascript
复制
@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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66090186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档