ljk*_*ljk 13 windows scripting batch-file
对于批处理文件,我想检查不同的条件并提供帮助消息
显示消息后退出批处理文件的最佳做法是哪一种?
if "%1"=="/?"(
echo "help message"
exit /b 0
)
[more code]
Run Code Online (Sandbox Code Playgroud)
或者
if "%1"=="/?"(
echo "help message"
goto :EOF
)
[more code]
:EOF
Run Code Online (Sandbox Code Playgroud)
第一个对我未经训练的眼睛来说似乎更好,但网上的很多例子都使用GOTO标签方法
SO 社区对此有何看法?
Unk*_*pus 21
我个人使用exit.
普通
exit命令只是终止当前脚本和父脚本(例如,如果您从命令行运行脚本,或从另一个批处理文件调用它)
exit /b用于终止当前脚本,但让父窗口/脚本/调用标签保持打开状态。通过退出,您还可以添加退出的错误级别。例如,
exit /b 1将产生%errorlevel%1。 示例:
@echo off
call :getError rem Calling the :getError label
echo Errorlevel: %errorlevel% rem Echoing the errorlevel returned by :getError
pause
:getError
exit /b 1 rem exiting the call and setting the %errorlevel% to 1
Run Code Online (Sandbox Code Playgroud)
会打印:
Errorlevel: 1
press any key to continue...
Run Code Online (Sandbox Code Playgroud)
在创建可能会失败的批处理脚本时,使用此方法设置错误级别非常有用。您可以:labels为不同的错误分别创建,并让每个错误都返回一个唯一的错误级别。
goto :eof结束当前脚本(调用)而不是父文件,(类似于exit /b)- 与 exit 不同,exit 可以设置退出错误级别,
goto :eof自动将错误级别设置为当前设置的级别,从而更难以识别问题。
两者也可以在同一个批处理文件中统一使用:
@echo off
call :getError
echo %errorlevel%
pause
goto :eof
:getError
exit /b 2
Run Code Online (Sandbox Code Playgroud)
退出批处理脚本的另一种方法是使用cmd /kWhen 在独立批处理文件中使用,cmd /k将使您返回到常规命令提示符。
总而言之,我建议使用exit只是因为您可以设置错误级别,但是,这真的取决于您。
GOTO :EOF 与 EXIT /B 之间没有功能或性能差异,只是 EXIT /B 允许您指定返回的 ERRORLEVEL,而 GOTO :EOF 则不允许。
显然,如果您想在返回时指定 ERRORLEVEL,那么 EXIT /B 是首选。
如果您不关心返回代码,或者您知道 ERRORLEVEL 已设置为正确的值,那么这没有什么区别 - 这完全是一个偏好/编码风格的问题。