退出批处理文件的最佳实践是什么?

31

我想为批处理文件检查不同的条件并有一个帮助消息。

在显示消息后退出批处理文件,哪种方式最佳?

if "%1"=="/?"(
  echo "help message"
  exit /b 0
)
[more code]
或者
if "%1"=="/?"(
  echo "help message"
  goto :EOF
)
[more code]
:EOF

对于我这样的初学者来说,第一种方法似乎更好,但是在线上很多示例使用了GOTO标签方法。

那么Stack Overflow社区对此有什么看法呢?


2
在你的搜索中,你是否遇到过这个页面 - user4317867
它们几乎做完全相同的事情;除了 exit /b 还可以设置 errorlevel 变量,这可能是您偶尔需要做的。除此之外,这只是个人喜好。 - SomethingDark
3
如果启用命令扩展,您无需定义标签:EOF。但是,如果您指定了它,GOTO EOFGOTO :EOF的行为会有所不同:前者跳转到标签,后者跳转到最后。 (我使用的是Win7 x64操作系统。) - aschipfl
2个回答

45

我个人使用exit命令。

  • 普通的exit命令会终止当前脚本和父级窗口/脚本/调用标签(例如,如果您在命令行中运行脚本或从另一个批处理文件中调用它)。

  • exit /b被用于终止当前脚本,但是保留父窗口/脚本/调用标签的打开状态。

  • 使用exit,您还可以添加一个退出的错误等级。例如,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类似)
  • exit不同,在其中可以设置退出错误级别,goto :eof会自动将错误级别设置为当前设置的级别,这使得难以识别问题。

两者还可以在同一批处理文件中同时使用:

@echo off
call :getError
echo %errorlevel%
pause
goto :eof

:getError 
exit /b 2

另一种退出批处理脚本的方法是使用 cmd /k。当在独立的批处理文件中使用时,cmd /k 将返回常规命令提示符。

总之,我建议使用 exit,因为你可以设置一个错误级别,但这真的取决于你。


5

GOTO :EOF 和 EXIT /B 之间在功能和性能方面没有区别,除了 EXIT /B 允许您指定返回的 ERRORLEVEL,而 GOTO :EOF 不允许。

显然,如果您想要在返回时指定 ERRORLEVEL,则优先选择使用 EXIT /B。

如果您不关心返回代码,或者您知道 ERRORLEVEL 已经设置为正确的值,那么它并没有任何区别 - 它变成了纯粹的偏好/编码风格问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接