批处理脚本输入数字2后异常退出问题求助(附代码)
问题分析与修复方案
两个核心问题的原因
1. 输入“2”闪退的原因
你的checkadmin检查模块有漏洞:当检测到不是管理员时,它只打印了提示,但没有暂停让你查看,也没有阻止脚本继续执行后续的创建用户代码。而创建用户需要管理员权限,命令执行失败后,脚本直接继续走流程,加上后续的cls清屏操作,你还没看到提示就被清掉,看起来就像“闪退”。
2. 管理员检查模块失效的原因
同样是checkadmin的问题:它只提示需要管理员,但没有中断脚本流程,非管理员依然能继续执行后续的创建/修改用户命令(只是这些命令会因为权限不足失败,但脚本不会停止)。
具体修复步骤
1. 修复管理员检查模块
把:checkadmin标签的代码改成下面这样,让它真正阻止非管理员操作:
:checkadmin net session >nul if %errorlevel% NEQ 0 ( cls echo. echo 请右键以管理员身份重新运行这个脚本! pause exit )
pause:让你能看到提示,不会一闪而过exit:直接退出脚本,不让非管理员继续执行后续操作
2. 统一选项判断的写法(避免潜在错误)
把选项2的判断语句从if "%input%" EQU 2改成和其他选项一致的if %input% EQU 2,统一写法减少奇怪的bug:
if %input% EQU 2 ( call checkadmin title Create a New User cls set /p user="USERNAME: " set /p password="PASSWORD: " net user %user% %password% /add echo New user created with credentials: echo %user% : %password% pause cls goto menu )
3. 修复选项3的变量名错误
你在选项3里把密码变量写成了passsword(多了一个s),导致修改密码时调用错误的变量,改成正确的password:
if %input% EQU 3 ( call checkadmin title Change a User's Password cls set /p username="TARGET USER: " set /p password="NEW PASSWORD: " net user %username% %password% pause cls goto menu )
修复后的完整代码
@echo off chcp 65001 >nul color 0A title Slimy's Account Hacking Tool set /p pass="Enter password: " cls if "%pass%" NEQ "slimy" exit :menu echo. echo *************** echo Menu echo *************** echo. echo. echo 1) List Users on Computer echo 2) Create a New User echo 3) Change a User's Password echo 4) Delete a User Account echo 5) Exit Slimy's Account Hacking Tool echo. set /p input="©️ " if %input% EQU 1 ( title List Users cls net user pause cls goto menu ) if %input% EQU 2 ( call checkadmin title Create a New User cls set /p user="USERNAME: " set /p password="PASSWORD: " net user %user% %password% /add echo New user created with credentials: echo %user% : %password% pause cls goto menu ) if %input% EQU 3 ( call checkadmin title Change a User's Password cls set /p username="TARGET USER: " set /p password="NEW PASSWORD: " net user %username% %password% pause cls goto menu ) if %input% EQU 4 ( cls echo you have no morals and are messed up for trying to do this. timeout /t 3 cls goto menu ) if %input% EQU 5 Exit :checkadmin net session >nul if %errorlevel% NEQ 0 ( cls echo. echo 请右键以管理员身份重新运行这个脚本! pause exit )
内容的提问来源于stack exchange,提问作者user26811984
相关产品推荐
相关产品推荐

