Bil*_*ert 27 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 ...
)
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 34
xcopy在这种情况下我会选择,因为记录了错误级别(请参阅xcopy文档,下面的解释):
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.
Run Code Online (Sandbox Code Playgroud)
无论如何,这xcopy是一个更强大的解决方案.该等效文档为copy不记录错误水平.
另外,您可能想重新考虑使用%errorlevel% 变量.如果有人明确地做了一些愚蠢的事情,那就会产生令人讨厌的后果(至少在某些版本的Windows中):
set errorlevel=22
Run Code Online (Sandbox Code Playgroud)
在这些情况下,将使用实际变量而不是实际的错误级别.执行此操作的"正常"方式是(按递减顺序,因为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
)
Run Code Online (Sandbox Code Playgroud)
如果您运行的是Win7或Win Server 2008或更高版本,您应该查看Robocopy,它现在是首选的批量复制解决方案.
Wil*_*ers 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
Run Code Online (Sandbox Code Playgroud)
Han*_*ood 11
我相信Copy只有0表示成功,1表示失败.
XCopy 记录了返回代码:
0 =复制文件时没有错误.
1 =没有找到要复制的文件.
2 =用户按下CTRL + C终止xcopy.
4 =发生初始化错误.内存或磁盘空间不足,或者在命令行中输入了无效的驱动器名称或无效语法.
5 =发生磁盘写入错误.
| 归档时间: |
|
| 查看次数: |
85028 次 |
| 最近记录: |