Windows批处理中的if / then / else语句

时间:2012-08-07 11:55:02

标签: windows batch-file

在shell脚本中,我有以下代码:

if echo Mr.32 ; then
  echo Success
else
  echo Failed
  exit
fi

Windows批处理文件的等效语法是什么?

2 个答案:

答案 0 :(得分:28)

我很难想象ECHO会在返回的ERRORLEVEL不等于0时失败。我想如果输出已重定向到文件并且目标驱动器已满,则可能会失败。

CptHammer使用ERRORLEVEL发布了一个很好的解决方案,尽管它不必要地使用GOTO。它可以在没有GOTO的情况下使用:

ECHO Mr.32
if errorlevel 1 (
  echo Failed
  exit /b
) else (
  echo Success
)

有一种更简单的方法可以对任何命令的SUCCESS或FAILURE采取行动。

command && success action || failure action

在你的情况下

ECHO Mr.32&& (
  echo Success
) || (
  echo Failed
  exit /b
)

答案 1 :(得分:12)

我认为这样的事情可能会成功:

REM run the command
ECHO Mr.32
IF ERRORLEVEL 1 GOTO failLabel

:successLabel
REM put code to execute in case of success here.
ECHO Success
GOTO endLabel

:failLabel
REM put code here that should be executed in case of failure.
ECHO Failed

:endLabel

这假定您要测试的命令(此处:echo MR.32)成功时返回0,失败时返回更高(BEWARE:大多数Windows操作系统中的Echo都不返回任何内容,因此,在此测试的实际值脚本可能是在脚本之前执行的最后一个命令的返回代码。你最好用命令测试:“DIR someFile.txt”如果somefile.txt存在则返回0,否则返回1.)

dbenham指出,这个结构使用了很多GOTO。这是因为这个GOTO结构是唯一一个在所有Windows版本中都能理解的结构。随着时间的推移出现了更紧凑的版本,但它们只适用于最近的Windows版本。