首页 > 解决方案 > 在子例程中退出批处理文件

问题描述

我有一个带有不同子例程的脚本:

REM ---------------MAIN------------------------START----------------------------
call :SUB_GetStartTime
call :SUB_SettingVariables 
call :SUB_CheckingParameters %* 
call :SUB_Copy 
call :SUB_GetEndTime
call :SUB_WriteLog
call :SUB_EndScreen

REM ---------------MAIN------------------------END------------------------------

在 SUB_CheckingParameters 我有这个 if 查询:

if "%~1"=="/help" (
    GOTO SUB_HELP
)

如果我传递参数 /help 它会转到我的帮助窗口:

cls
ECHO ===================HELP==============
ECHO help text help text help text
ECHO =====================================
timeout /t 120
exit /b

exit /b我希望脚本结束但它只是进入我的下一个子例程(SUB_Copy)之后。脚本不应该因为我使用GOTO SUB_Help而不是而结束call吗?

有人可以帮助我并告诉我我做错了什么吗?

标签: batch-filecmd

解决方案


我通常通过传回错误级别来处理这个问题:

@Echo off
REM ---------------MAIN------------------------START----------------------------
call :SUB_GetStartTime
call :SUB_SettingVariables 
call :SUB_CheckingParameters %* || Exit /b 1
call :SUB_Copy 
call :SUB_GetEndTime
call :SUB_WriteLog
call :SUB_EndScreen
REM ---------------MAIN------------------------END------------------------------
Echo end of main
Pause
Goto :Eof

:SUB_CheckingParameters
if /I "%~1"=="/help" GOTO SUB_HELP

:SUB_GetStartTime
:SUB_SettingVariables
:SUB_Copy
:SUB_GetEndTime
:SUB_WriteLog
:SUB_EndScreen

Echo:We are in %~0 Args %*
Goto :Eof

:SUB_HELP
rem cls
ECHO ===================HELP==============
ECHO help text help text help text
ECHO =====================================
timeout /t 120
exit /b 1

推荐阅读