2013-01-18 45 views
3

例如,在一个批处理文件,我输入下面的命令:如何知道命令是否通过批处理文件成功执行?

XCOPY C:\ fileA.txt d:\风向\/Y/d

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

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

+0

可能重复检查非零(错误)返回代码在Windows批处理文件](http://stackoverflow.com/questions/10935693/foolproof-way-to-check-for-nonzero-error-return-code-in-windows-batch-file) – dbenham

回答

10

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

您可以通过

if not errorlevel 0 goto ERR 

XCOPY errorlevels在你批量例如检查此:

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

1 - 没有文件被发现复制(无效源)

2 - XCOPY通过Ctrl-C键封端的复制完成之前

4 - 发生初始化错误。

5 - 发生磁盘写入错误。

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

+0

谢谢!我不知道有一个变量用于存储返回值。通过我的进一步测试,我必须测试从大数到小数的错误级别的值。否则,它会异常工作。 – SeaStar

+0

对!正如在另一个答案中的链接中指出的那样,“如果errorlevel'具有这个奇怪的属性:*如果返回代码等于或高于指定的错误级别*,它将返回TRUE。 – shinjin

3

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

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

其中1和2是由执行的最后一个程序返回的状态代码的可能值检查命令(类似Unix或Linux)的状态代码。您也可以执行如下操作:

echo %ERRORLEVEL% 

可打印出状态码,但请注意,它并不总是像“正常”环境变量那样工作。有一点让它变得不同的是,它不会显示“set”命令。

+0

非常感谢!它也帮助我。但是我担心我只能接受一个答案。 – SeaStar

2

我找到了公认的答案没有工作,但这样做的:

if %ERRORLEVEL% neq 0 goto ERR 
的[万无一失的方法
相关问题