【发布时间】:2014-07-30 00:55:42
【问题描述】:
我对批处理脚本有点陌生。 作为一个新手,我发现它们在编写脚本时都很有用 xcopy 和 robocopy 之间的主要区别是什么?
【问题讨论】:
标签: windows batch-file batch-processing
我对批处理脚本有点陌生。 作为一个新手,我发现它们在编写脚本时都很有用 xcopy 和 robocopy 之间的主要区别是什么?
【问题讨论】:
标签: windows batch-file batch-processing
Robocopy 在较新版本的 Windows 中取代了 XCopy
是的,我同意 Mark Setchell 的观点,他们都是垃圾。 (由微软提供)
更新:
XCopy 返回码:
0 - Files were copied without error.
1 - No files were found to copy.
2 - The user pressed CTRL+C to terminate xcopy. enough memory or disk space, or you entered an invalid drive name or invalid syntax on the command line.
5 - Disk write error occurred.
Robocopy 返回代码:
0 - No errors occurred, and no copying was done. The source and destination directory trees are completely synchronized.
1 - One or more files were copied successfully (that is, new files have arrived).
2 - Some Extra files or directories were detected. No files were copied Examine the output log for details.
3 - (2+1) Some files were copied. Additional files were present. No failure was encountered.
4 - Some Mismatched files or directories were detected. Examine the output log. Some housekeeping may be needed.
5 - (4+1) Some files were copied. Some files were mismatched. No failure was encountered.
6 - (4+2) Additional files and mismatched files exist. No files were copied and no failures were encountered. This means that the files already exist in the destination directory
7 - (4+1+2) Files were copied, a file mismatch was present, and additional files were present.
8 - Some files or directories could not be copied (copy errors occurred and the retry limit was exceeded). Check these errors further.
16 - Serious error. Robocopy did not copy any files. Either a usage error or an error due to insufficient access privileges on the source or destination directories.
这里有更多关于 Robocopy 返回值的详细信息:http://ss64.com/nt/robocopy-exit.html
【讨论】:
robocopy "." "D:\tmp\" /MOV”(D: 是物理硬盘)。这项工作。关闭共享该目录的计算机(复制时)。这不适用于大量错误,请按 CTRL-C 并重试。 robocopy 已尝试从 C:\Windows\System32 目录中移动所有文件。真的。 xcopy 无法做到这一点。
最重要的区别是robocopy(通常)会在发生错误时重试,而xcopy 不会。在大多数情况下,这使得 robocopy 更适合在脚本中使用。
附录: 为了完整起见,robocopy 存在一个已知的边缘情况问题; it may silently fail to copy files or directories whose names contain invalid UTF-16 sequences. 如果这对您来说是个问题,您可能需要查看第三方工具,或者自己编写。
【讨论】:
robocopy了。永远不能。一点都不安全。 Microsoft 应该在发布之前正确完成此类程序。您从网络复制,网络已关闭,然后它尝试从它所在的位置移动文件......它是C:\Windows\System32。干得好微软,20 年后仍然无法制作一个可以正确移动文件的程序。我将向我的学生展示这个示例,以便他们了解为什么必须使用 Linux。
xcopy 与 robocopy 的 cmets 和答案......他们自己说话。
我可以看到的不同之处在于 Robocopy 有更多的选择,但我没有发现其中任何一个特别有用,除非我正在做一些特别的事情。
我对几个复制例程进行了一些基准测试,发现 XCOPY 和 ROBOCOPY 最快,但令我惊讶的是,XCOPY 始终超过 Robocopy。
具有讽刺意味的是,robocopy 重试失败的副本,但它在我的基准测试中也失败了很多,而 xcopy 从未这样做过。
我在基准测试后进行了完整文件(逐字节)文件比较。
以下是我在测试中与 robocopy 一起使用的开关:
**"/E /R:1 /W:1 /NP /NFL /NDL"**.
如果有人知道更快的组合(除了删除 /E,我需要),我很想听听。
robocopy 的另一个有趣/令人失望的事情是,如果副本确实失败,默认情况下它会重试 1,000,000 次,每次尝试之间有 30 秒的延迟。如果您在无人看管的情况下运行较长的批处理文件,当您在几个小时后回来发现它仍在尝试复制特定文件时,您可能会非常失望。
/R 和 /W 开关可让您更改此行为。
如果有办法在此处附加文件,我可以分享我的结果。
我还在我的测试中加入了 FastCopy 和 Windows Copy,每个测试运行了 10 次。请注意,差异非常显着。 95% 置信区间没有重叠。
【讨论】:
inline 代码`(它看起来像这样的波浪线/波浪号键:~)并输入两次以获得新段落。
听到人们仍然在受苦 *{COPY} 无论版本。 我是一个经验丰富的批处理和 Bash 脚本编写者,我推荐 rsync ,您可以在 cygwin (cygwin.org) 中运行它,或者您可以找到一些浮动的二进制文件。 您可以将输出重定向到 2>&1 到一些日志文件,如 out.log 以供以后分析。 祝人们好运,是时候重新热爱生活了。 =M。卡恩=
【讨论】:
我编写了很多脚本来自动执行每日备份等。之前我使用 XCopy,然后转移到 Robocopy。无论如何,Robocopy 和 XCopy 都经常用于 Windows 中的文件传输。 Robocopy 代表强大的文件复制。使用所有类型的大文件复制这两个命令,但 Robocopy 添加了选项,使复制更容易以及用于调试目的。
话虽如此,让我们谈谈这两者之间的功能。
Robocopy 可以方便地镜像或同步目录。它 还根据文件检查目标目录中的文件 被复制并且不会浪费时间复制未更改的文件。
就像我一样,如果您喜欢自动化以进行每日备份 等等,“运行时间 - /RH”在没有任何交互的情况下变得非常有用。 这得到了 Robocopy 的支持。它允许您设置何时复制 应该完成而不是像 XCopy 那样在命令的时间完成。你 将在任务列表中看到 robocopy.exe 进程,因为它将运行 后台监控时钟以在合适的复制时间执行。
Robocopy 支持使用“/MON”或 “/MOT”命令。
Robocopy 为通过“存档”属性进行复制提供了额外的支持 在文件上,它支持复制所有属性,包括 时间戳、安全性、所有者和审计信息。
希望对你有所帮助。
【讨论】:
他们都是垃圾! XCOPY 较旧且不可靠,因此微软将其替换为 ROBOCOPY,这仍然是垃圾。
不过不用担心,这是一个由原始 COPY 命令开始的悠久传统,直到今天,它仍然需要 /B 开关才能使其真正正确复制!
【讨论】:
copy 现在在二进制文件上默认为 /b。我不确定你从哪里得到你对 robocopy 的仇恨......你的链接只是表明 archive 属性正在按照设计的方式使用。
copy 和 xcopy 都是 DOS 的一部分,它们必须分开,因为 copy 是内部命令,xcopy 是外部命令。 Windows 将它们都包含在内是为了向后兼容。 robocopy 命令最初是由一个单独的团队开发的,最初供内部使用,后来作为资源工具包的一部分。直到后来,它才成为 Windows 的内置部分。 (我也怀疑 shell 编程没有陡峭的学习曲线的说法。语法非常深奥!)