对于批处理文件,我想检查不同的条件并提供帮助信息
显示消息后退出批处理文件的最佳做法是哪一个?
if "%1"=="/?"(
echo "help message"
exit /b 0
)
[more code]
或
if "%1"=="/?"(
echo "help message"
goto :EOF
)
[more code]
:EOF
第一个似乎对我未经训练的眼睛更好,但很多在线示例使用GOTO
标记方法
SO社区对此有何看法?
答案 0 :(得分:3)
我个人使用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
会打印:
Errorlevel: 1
press any key to continue...
在创建可能出现故障的批处理脚本时,使用此方法设置错误级别非常有用。您可以为不同的错误创建单独的:labels
,并且每个错误都返回一个唯一的错误级别。
goto :eof
结束当前脚本(调用)但不结束父文件(类似于exit /b
)- 与退出不同,您可以在其中设置退出错误级别,
goto :eof
会自动将错误级别设置为当前设置的级别,从而使识别问题变得更加困难。
这两个也可以在同一个批处理文件中一起使用:
@echo off
call :getError
echo %errorlevel%
pause
goto :eof
:getError
exit /b 2
退出批处理脚本的另一种方法是使用cmd /k
在独立批处理文件中使用时,cmd /k
将返回常规命令提示符。
总而言之,我建议您使用exit
,因为您可以设置错误级别,但是,这完全取决于您。
答案 1 :(得分:1)
GOTO:EOF与EXIT / B之间没有任何功能或性能差异,除了EXIT / B允许您指定返回的ERRORLEVEL,而GOTO:EOF不允许。
显然,如果你想在返回时指定ERRORLEVEL,那么首选EXIT / B.
如果您不关心返回代码,或者您知道ERRORLEVEL已经设置为正确的值,那么它没有任何区别 - 它完全取决于首选项/编码风格。