17

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

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

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

4

2 回答 2

30

我很难想象 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
)
于 2012-08-07T15:48:07.790 回答
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,在失败时返回更高的值(注意:大多数 Windows 操作系统中的 Echo 将不返回任何内容,因此,在此脚本中测试的实际值可能是在脚本之前执行的最后一个命令的返回代码。你可能最好使用以下命令进行测试:“DIR someFile.txt”,如果 somefile.txt 存在则返回 0,否则返回 1。)

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

于 2012-08-07T13:37:04.777 回答