我想测试批处理文件中副本的成功/失败,但是我找不到任何关于返回错误级别代码的文档。例如
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 ...
)
答案 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)