如何通过批处理文件知道命令是否成功执行?

3
例如,在批处理文件中,我输入了以下命令: xcopy C:\fileA.txt D:\Dir\ /y /d
如果没有名为fileA.txt的文件,它将绝对失败。但是,我想知道如果它失败了,如何向用户输出一些信息。我该怎么做?
感谢任何帮助!

4个回答

11

大多数命令/程序在成功时会返回0,并返回其他值,称为错误级别,以表示错误。

例如,在您的批处理中,您可以检查这个值:

Most commands/programs return a 0 on success and some other value, called errorlevel, to signal an error.

You can check for this in your batch file, for example by:

if not errorlevel 0 goto ERR

xcopy错误等级:

0- 所有文件都成功复制,没有错误

1- 没有找到要复制的文件(源文件无效)

2- 在复制完成之前,XCOPY被Ctrl-C终止

4- 初始化错误发生了

5- 磁盘写入错误发生了

[1] http://m.computing.net/answers/dos/xcopy-errorlevels/7510.html


谢谢!我之前不知道有一个变量用于存储返回值。通过我的进一步测试,我必须从大数到小数测试errorlevel的值。否则,它会出现异常情况。 - SeaStar
没错!正如其他答案中链接所述,if errorlevel 具有这种奇怪的属性:如果返回代码等于或高于指定的错误级别,则返回 TRUE - shinjin

3

我认为你感兴趣的是“错误级别”。请查看http://www.robvanderwoude.com/errorlevel.php。基本上,你可以通过以下方式在批处理文件中检查命令的状态码(类似于Unix或Linux):

IF ERRORLEVEL 1 <do something>
IF ERRORLEVEL 2 <do something>

其中1和2是上一个程序返回的状态码可能的值。你也可以这样做:

echo %ERRORLEVEL%

要打印出状态码,但要注意它并不总是像"正常"环境变量那样运作。其中一个不同之处在于它不会在"set"命令中显示。

非常感谢!这对我也有帮助。但是恐怕我只能接受一个答案。 - SeaStar

2

我发现被接受的答案不起作用,但这个可以:

if %ERRORLEVEL% neq 0 goto ERR

0

只需使用以下结构:

command > nul 2> nul && (
    echo Success
    REM can be multi line
) || (
    echo Error
    REM can be multi line
)

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