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

Jee*_*tel 16 windows batch-file

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

if echo Mr.32 ; then
  echo Success
else
  echo Failed
  exit
fi
Run Code Online (Sandbox Code Playgroud)

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

dbe*_*ham 28

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

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

ECHO Mr.32
if errorlevel 1 (
  echo Failed
  exit /b
) else (
  echo Success
)
Run Code Online (Sandbox Code Playgroud)

有一种更简单的方法可以对任何命令的SUCCESS或FAILURE采取措施.

command && success action || failure action
Run Code Online (Sandbox Code Playgroud)

在你的情况下

ECHO Mr.32&& (
  echo Success
) || (
  echo Failed
  exit /b
)
Run Code Online (Sandbox Code Playgroud)

  • 如果Errorlevel 1(commandgroup1)else(commandGroup2)将执行commandGroup1以获取高于1的ANY返回代码.(即:CommandGroup1为Failur且CommandGroup2为Success) (2认同)

cpt*_*mer 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
Run Code Online (Sandbox Code Playgroud)

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

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