批处理启停服务脚本返回所有错误码问题排查
批处理脚本问题修复
问题根源
你的脚本执行后会输出所有提示,是因为批处理的标签仅作为跳转入口,没有自动终止后续代码执行的功能。比如当goto 0执行完echo Sophos Connect Service started.后,脚本会继续向下执行:1、:2等所有后续标签里的echo命令,导致所有提示都被输出。另外原脚本的ERRORLEVEL判断顺序也有问题:批处理中if ERRORLEVEL N表示错误码≥N时成立,若从最小错误码开始判断,大错误码会被小错误码的条件优先匹配,导致判断逻辑失效。
修改后的脚本
@echo off net stop scvpn if ERRORLEVEL 24 goto 24 if ERRORLEVEL 14 goto 14 if ERRORLEVEL 6 goto 6 if ERRORLEVEL 5 goto 5 if ERRORLEVEL 3 goto 3 if ERRORLEVEL 2 goto 2 if ERRORLEVEL 1 goto 1 if ERRORLEVEL 0 goto 0 exit :0 echo Sophos Connect Service started. goto :eof :1 echo Function not supported. goto :eof :2 echo Access is denied, service not stopped. goto :eof :3 echo A dependent service is running. goto :eof :5 echo Control cannot be accepted. goto :eof :6 echo Sophos Connect Service is not running. goto :eof :9 echo Path not found. goto :eof :14 echo Sophos Connect Service is disabled. goto :eof :24 echo Sophos Connect Service is already paused. goto :eof
关键修改说明
- 调整ERRORLEVEL判断顺序:从最大的错误码往最小的判断,确保每个错误码能匹配到对应的条件分支。
- 添加终止指令:在每个标签的echo语句后加上
goto :eof(表示跳转到当前脚本末尾,终止执行),这样输出对应提示后就停止,不会继续执行后续标签的内容。
内容的提问来源于stack exchange,提问作者Antoine N
相关产品推荐
相关产品推荐

