3

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

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

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

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

4

4 回答 4

11

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

您可以在批次中检查这一点,例如通过

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

于 2013-01-18T06:57:31.217 回答
3

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

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

其中 1 和 2 是最后执行的程序返回的状态码的可能值。你也可以做类似的事情

echo %ERRORLEVEL%

打印出状态码,但请注意,它的行为并不总是像“正常”环境变量。使它与众不同的一件事是它不会出现在“set”命令中。

于 2013-01-18T06:52:54.487 回答
2

我发现接受的答案不起作用,但确实如此:

if %ERRORLEVEL% neq 0 goto ERR
于 2014-05-30T11:58:21.423 回答
0

只需使用以下结构:

command > nul 2> nul && (
    echo Success
    REM can be multi line
) || (
    echo Error
    REM can be multi line
)
于 2020-12-22T10:10:33.820 回答