上篇我们学习了xcopy的用法,知道它是复制文件和目录树的命令,来回顾下。
复制文件和目录树。
XCOPY 源 [目标] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]
[/EXCLUDE:file1[ file2][ file3]...]
最常用的参数是 /S /D /Y.
/S 复制非空的目录和子目录。如果省略 /s,xcopy 将在一个目录中工作。
/D 只复制比目标文件新的所有源文件。
/Y 禁止提示您确认要覆盖现存的目标文件。
这篇我们学习一个与xcopy有些渊源的命令robocopy。
ROBOCOPY - Robust File and Folder Copy.(可靠的文件和文件夹复制)
当我们用XCOPY尝试拷贝路径名超过Windows最大路径长度(254个字符)的源文件时,将导致一个相当无用的“内存不足”错误,然后操作将停止。
这个已经存在了很多年的错误使得XCOPY成为任何备份脚本的糟糕选择,我们可以使用ROBOCOPY代替这一操作。
在了解robocopy前,我们看看xcopy与robocopy有何差异。
2007年,XCOPY被弃用,取而代之的是Robocopy,但它后来得到了缓刑,并改良添加了一些新功能。
这两种工具之间有很多重叠之处,在复制非常大的目录或数目众多的小文件时,Robocopy通常效率更高,更可靠。
在XCOPY中*.*是用来匹配所有的文件所必须的,在robocopy中这种指定是不需要的,因为这是默认操作。
XCOPY /D选项将只复制源日期/时间比目标时间新的文件,这也是Robocopy的默认操作。
要排除文件(XCOPY /exclude),请使用Robocopy选项/XF(排除文件)和/XD(排除目录)。对于多个排除,使用Robocopy /JOB files_to_exclude.rcj
还有都支持UNC路径格式(网络路径格式,如
\\servername\sharename\directory\filename),具有同样的参数 /S /E /A等。
下面我们学习下robocopy的语法格式:
Syntax
ROBOCOPY 源文件夹 目标文件夹 要被拷贝的文件 选项
默认情况下,Robocopy只会复制源和目标具有不同时间戳或不同文件大小的文件。
robocopy的参数很多,分为源参数,目标参数,复制参数,排除参数,高级参数等等。通过不同参数的搭配可以实现非常多的功能,主要是复制、移动和同步(或者叫镜像)。
另外,拷贝的效率一直是大家比较关注的问题,在参数调配上需要注意,好的调配能提高不少效率。
先来看下语法参数(图):
列出完整的参数说明:可以用「robocopy /?」
------------------------------------------------------------------------------
Usage :: ROBOCOPY source destination [file [file]...] [options]
source 来源:: 原始目录(驱动器:\路径或\\服务器名\共享目录\路径)。
destination目录:: 目标目录(驱动器:\路径或\\服务器名\共享目录\路径)。
1.先讲复制,想怎么复制就怎么复制
robocopy d:\work e:\backup *.txt *.doc /s
参数备注:
将d:\work文件下的TXT、DOC文件复制到e:\backup文件夹,其他文件则不复制。/s是表示包括除空文件夹的所有子目录,如果没有/s则仅复制d:\work下的文件而不包括子目录。
robocopy d:\work e:\backup /e /s
/e表示复制所有子目录包括空文件夹。
robocopy d:\work e:\backup /e /lev:2
只复制两个层级内的文件(两级目录,再下的层级里的文件则不拷贝)。
robocopy d:\work e:\backup /e /xf *.tmp *.bak
临时文件和备份文件不复制。
robocopy d:\work e:\backup /s *.txt /maxage:7
只复制最近7天修改的txt文本文件。
2.移动文件
robocopy d:\work e:\backup /move /e /s
3.同步(或叫镜像,一般用于备份)文件
robcopy d:\work e:\backup /mir
注意:这个复制是镜像复制,多的会删除,少的会补上。
/mir的作用等同于/purge /e,/purge表示清理目标文件夹有而源文件夹里没有的文件(夹)。
通过这个指令,能保证源文件夹和目标文件夹结构与文件完全相同。这在新增映射制作备份时,非常有用。但如果不需要就要慎重了。
4.几个排除的区别
1)垃圾文件不copy
robocopy d:\work e:\backup /e /xf *.tmp *.bak
临时文件和备份文件不复制。
2)隐藏文件不copy
robocopy d:\work e:\backup /e /xa:h
/e等同于/e /s
/XC :: 排除已更改的文件。excluding change
/XN :: 排除较新的文件。意思是不要从来源端复制比目的端新的文件。只复制旧文件。excluding newer
/XO ::排除较旧的文件。意思是来源端没有比目的端新时,就不复制。只复制新文件。excluding older
5.效率问题
先看一个例子
robocopy %resource%\ %path22%\ /NFL /NS /NC /NP /MT:50 1>>log.txt 2>>error.txt
主要是MT的设置,默认是8,最大是128,50是笔者比较后的最佳设置,这个设置效率(拷贝速度)最高。搭配一些其它的参数可使log简洁的同时,不影响作用,速度还能最快。这也是其它拷贝类工具所不能比拟的,说是神器也不为过。
最后,为什么不用可视版的工具robocopy,一来没有命令行方便(参数超极多),二来会生成隐藏log ,不推荐。