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

时间:2013-01-18 06:48:09

标签: windows batch-file

例如,在批处理文件中,我输入以下命令:

xcopy C:\ fileA.txt D:\ Dir \ / y / d

如果没有名为fileA.txt的文件,它将绝对失败。但我想知道它是否失败,然后向用户输出一些消息。我怎么能这样做?

任何帮助都将不胜感激,谢谢!

4 个答案:

答案 0 :(得分:11)

大多数命令/程序在成功时返回0,而其他一些值(称为 errorlevel )则表示错误。

您可以批量检查,例如

if not errorlevel 0 goto ERR

xcopy errorlevels:

0 - 所有文件都已正确复制

1 - 未找到任何文件要复制(无效来源)

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

4 - 发生初始化错误。

5 - 发生磁盘写入错误。

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

答案 1 :(得分:3)

我认为您感兴趣的是“错误级别”。见http://www.robvanderwoude.com/errorlevel.php。基本上,在批处理文件中,您可以通过说

来检查命令的状态代码(类似于Unix或Linux)。
IF ERRORLEVEL 1 <do something>
IF ERRORLEVEL 2 <do something>

其中1和2是最后一个程序执行的状态代码的可能值。您也可以执行类似

的操作
echo %ERRORLEVEL%

打印出状态代码,但请注意它并不总是像“普通”环境变量一样。使其与众不同的一点是它没有出现“set”命令。

答案 2 :(得分:2)

我发现接受的答案没有用,但确实如此:

if %ERRORLEVEL% neq 0 goto ERR

答案 3 :(得分:0)

只需使用以下结构:

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