Windows复制命令返回码?

时间:2011-11-21 21:55:31

标签: windows batch-file

我想测试批处理文件中副本的成功/失败,但是我找不到任何关于返回错误级别代码的文档。例如

copy x y
if %errorlevel%. equ 1. (
    echo Copy x y failed due to ...
    exit /B
) else (
  if %errorlevel% equ 2. (
      echo Copy x y failed due to ...
      exit /B
   )
... etc ...
)

5 个答案:

答案 0 :(得分:31)

在这种情况下,我会选择xcopy,因为会记录错误级别(请参阅下面的xcopy documentation转义):

Exit
code  Description
====  ===========
  0   Files were copied without error.
  1   No files were found to copy.
  2   The user pressed CTRL+C to terminate xcopy.
  4   Initialization error occurred. There is not
      enough memory or disk space, or you entered
      an invalid drive name or invalid syntax on
      the command line.
  5   Disk write error occurred.

无论如何,xcopy是一个更强大的解决方案。 copy的{​​{3}}未记录错误级别。


顺便说一下,您可能想重新考虑使用%errorlevel% 变量。如果有人明确做了些傻话,那会产生令人讨厌的后果(至少在某些版本的Windows中)像:

set errorlevel=22

在这些情况下,将使用实际的变量,而不是强调实际的错误级别。执行此操作的“正常”方式是(按降序排列,因为errorlevel是“大于或等于”检查):

if errorlevel 2 (
    echo Copy x y failed due to reason 2
    exit /B

)
if errorlevel 1 (
    echo Copy x y failed due to reason 1
    exit /B
)

如果您运行的是Win7或Win Server 2008或更高版本,您应该查看equivalent documentation,它现在是首选的批量复制解决方案..

答案 1 :(得分:16)

值得指出的是,xcopy并不总是返回您期望的错误代码。

例如,当尝试使用通配符复制多个文件但没有要复制的文件时,您希望返回错误代码为1(“找不到要复制的文件”),但实际上它返回0(“文件被复制没有错误“)

C:\Users\wilson>mkdir bla

C:\Users\wilson>mkdir blert

C:\Users\wilson>xcopy bla\* blert\
0 File(s) copied

C:\Users\wilson>echo %ERRORLEVEL%
0

答案 2 :(得分:11)

我相信Copy只返回0表示成功,1表示失败。

XCopy记录了返回代码:

  

0 =文件被复制没有错误   1 =没有找到要复制的文件   2 =用户按下CTRL + C终止xcopy   4 =发生初始化错误。内存或磁盘空间不足,或者在命令行中输入了无效的驱动器名称或无效语法   5 =发生磁盘写入错误。

答案 3 :(得分:1)

我还想强调一点:xcopy以及robocopy只能复制文件,但他们无法重命名。
在查看原始情况(copy x y,看起来像是重命名给我)时,我的印象是copy命令仍然是唯一适合此目的的命令。

答案 4 :(得分:-1)

Error# Description 
0 No error 
1 Not owner 
2 No such file or directory 
3 Interrupted system call 
4 I/O error 
5 Bad file number 
6 No more processes 
7 Not enough core memory 
8 Permission denied 
9 Bad address 
10 File exists 
11 No such device 
12 Not a directory 
13 Is a directory 
14 File table overflow 
15 Too many open files 
16 File too large 
17 No space left on device 
18 Directory not empty 
999 Unmapped error (ABL default)