批处理脚本仅首命令生效,输入其他数字直接重启的问题排查
Bug-Blitz批处理脚本修复方案
问题描述
编写了名为Bug-Blitz的批处理脚本,需求是输入对应数字执行指定命令,但仅输入1时命令正常运行;输入其他数字后,屏幕会立即清空并重启脚本。已尝试管理员模式运行及虚拟机测试,问题仍存在。原脚本代码如下:
@echo off :optimizer color F0 echo Welcome to Bug-Blitz! echo. echo 1 [Fix Registry Errors (It will take a few seconds)] echo. echo 2 [Storage Cleanup] echo. echo 3 [Refresh IP (It will take a few seconds)] echo. echo 4 [Restart System] set /p tweaks=Enter a number from above: if %tweaks% == 1 DISM /Online /Cleanup-Image /CheckHealth cls goto optimizer if %tweaks% == 2 del C:\Windows\prefetch\*.*/s/q pause cls goto optimizer if %tweaks% == 3 ipconfig /release && ipconfig /renew pause cls goto optimizer if %tweaks% == 4 shutdown /r pause cls echo Your computer will restart in a few moments... pause exit
问题原因
脚本核心问题是第一个if判断后直接执行了cls和goto optimizer——无论输入数字是否匹配1,这两行代码都会被触发。输入2、3、4时,脚本还没走到对应if判断,就已清屏并跳回初始菜单,导致出现“立即重启脚本”的现象。
修复方案
将每个if的执行逻辑用括号包裹,确保仅匹配对应数字时才执行后续操作,同时优化无效输入处理:
@echo off :optimizer color F0 echo Welcome to Bug-Blitz! echo. echo 1 [Fix Registry Errors (It will take a few seconds)] echo. echo 2 [Storage Cleanup] echo. echo 3 [Refresh IP (It will take a few seconds)] echo. echo 4 [Restart System] set /p tweaks=Enter a number from above: if "%tweaks%" == "1" ( DISM /Online /Cleanup-Image /CheckHealth pause cls goto optimizer ) if "%tweaks%" == "2" ( del C:\Windows\prefetch\*.*/s/q pause cls goto optimizer ) if "%tweaks%" == "3" ( ipconfig /release && ipconfig /renew pause cls goto optimizer ) if "%tweaks%" == "4" ( shutdown /r cls echo Your computer will restart in a few moments... pause exit ) :: 处理无效输入 echo Invalid input! Please enter a number from 1 to 4. pause cls goto optimizer
修改说明
- 括号包裹执行块:确保每个
if的命令、暂停、清屏等操作仅在匹配对应数字时执行,避免无关代码干扰。 - 变量加引号:防止输入为空或含特殊字符时出现语法错误,提升脚本稳定性。
- 新增无效输入提示:用户输入非1-4内容时,给出明确提示后返回菜单,优化体验。
- 调整选项4逻辑:移除多余
pause,确保重启提示正常显示后再退出。
内容的提问来源于stack exchange,提问作者Idk_what_I'm_doing_lol
相关产品推荐
相关产品推荐

