最快的方法复制文件

如果我们在构build服务器(CCNET)上成功构build,则所有ASP.NET网站文件都将被复制到虚拟目录(%output_dir%),以便非开发人员可以查看/testing最新版本的网站。 在构build的最后,执行下面的bat文件。

rmdir /s /q "%output_dir%" mkdir "%output_dir%" xcopy "%source_dir%*" "%output_dir%" /e /c /i /q /-y 

问题是我发现复制速度慢,想知道在Windows 2008中是否有可用的复制命令比xcopy快? 源和目标位于同一个驱动器上。 以下是我们在复制时使用的参数。

 /e = copies directories and sub directories including empty ones. /c = continues copying even if there are errors /i = if destination does not exist destination is directory /q = don't display filenames /-y = confirm overwrite 

仅从性能angular度来看 , xcopy或robocopy会给你类似的结果。 我在Windows Vista 64位SP2上进行了一些testing,做了一些比较。 所有的拷贝都是在内部的7200转的Sata II磁盘和外置的USB 2.0磁盘之间进行的,或者在指定的内部驱动器上。 没有特别的设置完成(如果无效/validationtesting,自己动手),只能将命令input到batch file中执行。 PowerShell被用来捕获开始和停止时间。 经过几次传球之后,我使用的工具的平均数:

文件:732,909,568字节(698 MB),1个ISO文件复制到同一个内部磁盘上的不同目录。

 copy 6 secs (ex. copy G:\folder1\* G:\folder2\) xcopy 6 secs (ex. xcopy G:\folder1 G:\folder2 /I /E /Y /R) robocopy 6 secs (ex. robocopy G:\folder1\ G:\folder2 /E /NP) teracopy 28 secs (ex. TeraCopy.exe Copy G:\folder1\ G:\folder2\) fastcopy 19 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=G:\folder2) 

文件:732,909,568字节(698 MB),1个ISO文件复制到外部USB磁盘。

 copy 36 secs (ex. copy G:\folder1\* I:\folder2\) xcopy 35 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R) robocopy 36 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP) teracopy 36 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\) fastcopy 38 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2) 

文件:45,039,616bytes(42.9MB)5个随机文件复制到外部USB磁盘

 copy 6 secs (ex. copy G:\folder1\* I:\folder2\) xcopy 5 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R) robocopy 6 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP) teracopy 12 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\) fastcopy 6 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2) 

文件/目录:1,087,180,800字节(1.01 GB),27个文件/ 8个目录复制到外部USB磁盘。

 copy *Not included in test xcopy 57 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R) robocopy 58 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP) teracopy 56 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\) fastcopy 60 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2) 

这绝不是一个彻底的testing,但只是在这个stream派中的一些更stream行的工具抛出一个快速的现实世界的情况表明,你很安全坚持xcopy或Robocopy(从性能的angular度来看)。 Robocopy选项/NP (无进度)也可以为您节省时间。 这并不意味着你不能使用xcopy以外的其他东西。 Robocopy是一个很好的例子(来自Wikipedia ):

Robocopy的function超越了内置的Windows副本和function
xcopy命令,包括以下内容:

  • 能够容忍networking中断,并恢复以前停止的复制(不完整的文件logging与1980-01-01相对应的date戳记,并包含恢复logging,以便Robocopy知道从何处继续)。
  • 能够正确复制属性,所有者信息,备用数据stream,审计信息和默认时间戳,而不需要经常被遗忘的命令行开关。
  • 能够正确复制NTFS ACL(当提供/ COPYALL时),并且声明Windows NT“备份权限”(/ B),以便pipe理员可以将整个目录(包括拒绝可读性的文件)复制到pipe理员。
  • 持久性默认情况下,如果文件无法打开,可编程数量的自动重试。
  • “镜像”模式,通过select性地删除源中不存在的目标文件来保持树同步。
  • 能够复制大量的文件,否则会导致内置的XCOPY工具崩溃。
  • 在不断更新的命令行上的进度指示器。
  • 能够复制超过256个字符的长文件名和文件夹名 – 理论上最多32,000个字符 – 无错误。

我通常使用:

 robocopy source dest /E /MIR 

或一些其他的参数变体 – 可能是/NFL /NDL /NS /NC /NP来匹配“安静”

事实上,通过消除networking,你真的限制了你的testing。 你可能想考虑使用networking共享,这将是pipe理工作的大部分。

此外,您应该使用FTP,并完全跳过CIFS。 Eseutil.exe是另一个实用程序,你可以扔在那里。 (可以在其他地方使用的Exchange实用程序,以及四个依赖的dll。)

然后我想看看你的结果。

我使用XCopy来达到同样的目的。 我也做了另一个NIC添加到该服务器,并把它放在一个单独的子网。 然后直接连接到我从中传输文件的服务器。 这样,2台机器通过一个子网移动复制的数据,用户仍然可以通过直接连接到局域网的第二个NIC访问。

你说源和目的地在同一个驱动器上,但它们都在构build服务器上吗?

如果构build服务器是源和目标的位置,请考虑将一个文件夹或另一个文件夹移动到另一个驱动器,可能位于另一个控制器上。

如果构build服务器不是源和目标的位置(构build子项并不总是在构build它们的服务器上),请考虑在源和目标文件夹所在的服务器上创build任务。 然后,远程启动该任务。

这些年来,我不得不做几份。 我们有一台Windows Server 2008 R2机器,它拥有一个内含超过12M映像(大约400GB)的单一目录。

显然我宁愿它不是这样一个大目录但是:

  • XCOPY处理大文件夹的副本,但在尝试从大目录移动时崩溃。
  • ROBOCOPY处理副本没有问题,是一个更好的经验复制时,它提供了更好的进度指标。
  • 小目录上的XCOPY更快。

无论如何,我只是觉得我会分享我的经验,因为我的真正大目录的不寻常的性质。