最快的文件复制方法


15

如果我们在构建服务器(CCNET)上构建成功,则所有ASP.NET网站文件都将复制到虚拟目录(%output_dir%)中,以便非开发人员可以查看/测试网站的最新版本。在构建结束时,将执行以下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

Answers:


21

仅从性能角度来看xcopyrobocopy将为您提供类似的结果。我在Windows Vista 64位SP2盒上进行了一些测试,以进行一些比较。所有复制都在内部7200 RPM Sata II磁盘和外部USB 2.0驱动器之间进行,或者在指定的同一内部驱动器本身上进行。无需进行任何特殊设置(如果使测试无效/使测试无效,请自行决定),仅将命令输入到批处理文件中即可执行。使用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)

这绝不是一个详尽的测试,而只是对这种类型的一些较流行的工具进行了快速的实际测试,表明您可以安全地使用xcopy或Robocopy(仅从性能角度而言)。另外,Robocopy选项/NP(无进度)可为您节省0时间。但这并不意味着您不能从使用xcopy之外的其他功能中受益。Robocopy是一个很好的例子(来自Wikipedia):

Robocopy以内置Windows copy和
xcopy命令之上和之外的功能而著称,包括:

  • 能够容忍网络中断并在以前中断的地方恢复复制的能力(不完整的文件会标有对应于1980-01-01的日期戳,并包含恢复记录,因此Robocopy知道从何处继续)。
  • 默认情况下,能够正确复制属性,所有者信息,备用数据流,审核信息和时间戳,而无需进行许多通常被遗忘的命令行开关。
  • 能够正确复制NTFS ACL(如果提供了/ COPYALL),并且能够断言Windows NT的“备份权限”(/ B),因此管理员可以复制整个目录,包括拒绝管理员读取的文件。
  • 默认情况下为持久性,如果无法打开文件,则具有可编程的自动重试次数。
  • “镜像”模式,通过有选择地从目标中删除源中不再存在的文件,使树保持同步。
  • 能够复制大量文件,否则将使内置XCOPY实用程序崩溃。
  • 命令行上的进度指示器会不断更新。
  • 能够复制长度超过256个字符(理论上最多为32,000个字符)的长文件和文件夹名称,而不会出错。

5

我通常使用:

robocopy source dest /E /MIR

或其他一些参数变体-可能/NFL /NDL /NS /NC /NP与“安静”匹配


是的,/ NP对于快速的复印件是必须的
Ivo Looser

当您一次又一次地创建与源中完全相同的内容时,我将使用Robocopy命令中的/ MIR或/ PURGE。
伊沃·卢瑟

1

实际上,通过消除网络,您实际上限制了测试。您可能希望考虑使用网络共享,这将是大量管理工作。

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

然后,我想看看您的结果。


1

我出于相同的目的使用XCopy。我所做的就是在该服务器上添加了另一个NIC,并将其放在单独的子网中。然后直接连接到我要从中传输文件的服务器。这样,两台机器就可以通过一个子网移动复制的数据,并且用户仍然可以通过直接连接到LAN的第二个nic访问。


1

您说源和目标在同一驱动器上,但是它们都在构建服务器上吗?

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

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


1

这些年来,我不得不做几本。我们有一台Windows Server 2008 R2计算机,其中有一个目录,其中包含超过1200万张映像(约400GB)。

显然,我希望它不是这么大的目录,但:

  • XCOPY处理大文件夹的副本,但是在尝试从大目录继续前进时会崩溃。
  • ROBOCOPY可以毫无问题地处理副本,并且在复制时提供了更好的进度指示器,因此是一种更好的体验。
  • 小型目录上的XCOPY更快。

无论如何,由于我的目录很大,所以我只是想与他们分享经验。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.