robocopy命令的用法与实例(Windows 的可靠文件复制)
一 Robocopy简介
Robocopy 是一个功能超强的32位的文件复制工具,该工具来自windows资源包,可以直接在网上下载。
使用Robocopy你能够拷贝单个目录,或迭代的拷贝目录及其所有的子目录。该工具通过文件是否存在于源目录,目标目录,或两者都存在来分类。如果文件同时存在于源目录和目标目录,则该工具更具体地通过比较源文件和目标文件的大小和时间戳来分类。通过这些分类,你可以控制那些文件将被拷贝。如果一个文件同时存在于源目录和目标目录,默认的只有源文件和目标文件拥有不同的时间戳或大小时,Robocopy重新拷贝该文件。如果源目录和目标目录处于比较差的网路环境中时,通过此方式可以节约时间。同时你还可以设置当拷贝有错误发生时,继续重新拷贝,如果你所处的网络不太稳定的话,此方式可以大大的节约时间。
二 使用格式
ROBOCOPY source destination [file [file]...] [options]
源:: 源目录(驱动器:\路径或\服务器\共享\路径)。
目录:: 目标目录(驱动器:\路径或\服务器\共享\路径)。
文件:: 要复制的文件(名称/通配符: 默认为 "*.*")。
三 功能
1)用文件名,通配符,路径,文件属性来匹配拷贝源;或者也可以使用文件名,通配符,路径,文件属性来从源目录中去除匹配的项,剩余的项作为拷贝源。
2)通过名字或路径来去除子目录的拷贝。
3)在拷贝后删除源文件或目录。(其实就是移动功能)
4)在目标目录中删除源目录中不存在的文件和目录。(其实就是同步功能,保证目标目录跟源目录保持一致)
5)控制当拷贝中遭遇网络问题时,重新拷贝的次数和间隔时间。
6)安排拷贝工作自动运行。
7)指定何时拷贝开始执行。
8)监控目录树的改变。
9)选择性的拷贝数据。
四 版本
- v1.96 - Bundled in the Windows 2000
- XP010 - Bundled in the Windows 2003 resource kit
- XP026 - Downloaded with Robocopy GUI
- XP027 - Bundled with Windows Vista
- XP028 - Bundled with Windows Vista SP1 and Windows Server 2008
五 Robocopy的命令行选项
来自win10版本的robocopy的命令行选项
用法 :: ROBOCOPY source destination [file [file]...] [options]
源 :: 源目录(驱动器:\路径或\\服务器\共享\路径)。
目标 :: 目标目录(驱动器:\路径或\\服务器\共享\路径)。
文件 :: 要复制的文件(名称/通配符: 默认为 "*.*")。
1、复制选项
/S :: 复制子目录,但不复制空的子目录。
/E :: 复制子目录,包括空的子目录。
/LEV:n :: 仅复制源目录树的前 n 层。
/Z :: 在可重新启动模式下复制文件。
/B :: 在备份模式下复制文件。
/ZB :: 使用可重新启动模式;如果拒绝访问,请使用备份模式。
/J :: 复制时使用未缓冲的 I/O (推荐在复制大文件时使用)。
/EFSRAW :: 在 EFS RAW 模式下复制所有加密的文件。
/COPY:复制标记:: 要复制的文件内容(默认为 /COPY:DAT)。
(复制标记: D=数据,A=属性,T=时间戳)。
(S=安全=NTFS ACL,O=所有者信息,U=审核信息)。
/SEC :: 复制具有安全性的文件(等同于 /COPY:DATS)。
/COPYALL :: 复制所有文件信息(等同于 /COPY:DATSOU)。
/NOCOPY :: 不复制任何文件信息(与 /PURGE 一起使用)。
/SECFIX :: 修复所有文件的文件安全性,即使是跳过的文件。
/TIMFIX :: 修复所有文件的文件时间,即使是跳过的文件。
/PURGE :: 删除源中不再存在的目标文件/目录。
/MIR :: 镜像目录树(等同于 /E 加 /PURGE)。
/MOV :: 移动文件(复制后从源中删除)。
/MOVE :: 移动文件和目录(复制后从源中删除)。
/A+:[RASHCNET] :: 将给定的属性添加到复制的文件。
/A-:[RASHCNET] :: 从复制的文件中删除给定的属性。
/CREATE :: 仅创建目录树和长度为零的文件。
/FAT :: 仅使用 8.3 FAT 文件名创建目标文件。
/256 :: 关闭超长路径(> 256 个字符)支持。
/MON:n :: 监视源;发现多于 n 个更改时再次运行。
/MOT:m :: 监视源;如果更改,在 m 分钟时间后再次运行。
/RH:hhmm-hhmm :: 可以启动新的复制时运行的小时数 - 时间。
/PF :: 基于每个文件(而不是每个步骤)来检查运行小时数。
/IPG:n :: 程序包间的间距(ms),以释放低速线路上的带宽。
/SL :: 对照目标复制符号链接。
/MT[:n] :: 使用 n 个线程进行多线程复制(默认值为 8)。
n 必须至少为 1,但不得大于 128。
该选项与 /IPG 和 /EFSRAW 选项不兼容。
使用 /LOG 选项重定向输出以便获得最佳性能。
/DCOPY:复制标记:: 要复制的目录内容(默认为 /DCOPY:DA)。
(复制标记: D=数据,A=属性,T=时间戳)。
/NODCOPY :: 不复制任何目录信息(默认情况下,执行 /DCOPY:DA)。
/NOOFFLOAD :: 在不使用 Windows 复制卸载机制的情况下复制文件。
2、文件选择选项
/A :: 仅复制具有存档属性集的文件。
/M :: 仅复制具有存档属性的文件并重置存档属性。
/IA:[RASHCNETO] :: 仅包含具有任意给定属性集的文件。
/XA:[RASHCNETO] :: 排除具有任意给定属性集的文件。
/XF 文件[文件]... :: 排除与给定名称/路径/通配符匹配的文件。
/XD 目录[目录]... :: 排除与给定名称/路径匹配的目录。
/XC :: 排除已更改的文件。
/XN :: 排除较新的文件。
/XO :: 排除较旧的文件。
/XX :: 排除多余的文件和目录。
/XL :: 排除孤立的文件和目录。
/IS :: 包含相同文件。
/IT :: 包含已调整的文件。
/MAX:n :: 最大的文件大小 - 排除大于 n 字节的文件。
/MIN:n :: 最小的文件大小 - 排除小于 n 字节的文件。
/MAXAGE:n :: 最长的文件存在时间 - 排除早于 n 天/日期的文件。
/MINAGE:n :: 最短的文件存在时间 - 排除晚于 n 天/日期的文件。
/MAXLAD:n :: 最大的最后访问日期 - 排除自 n 以来未使用的文件。
/MINLAD:n :: 最小的最后访问日期 - 排除自 n 以来使用的文件。
(If n < 1900 then n = n days, else n = YYYYMMDD date)。
/XJ :: 排除接合点和符号链接。(默认情况下通常包括)。
/FFT :: 假设 FAT 文件时间(2 秒粒度)。
/DST :: 弥补 1 小时的 DST 时间差。
/XJD :: 排除目录的接合点和符号链接。
/XJF :: 排除文件的符号链接。
/IM :: Include Modified files (differing change times).
3、 重试选项
/R:n :: 失败副本的重试次数: 默认为 1 百万。
/W:n :: 两次重试间的等待时间: 默认为 30 秒。
/REG :: 将注册表中的 /R:n 和 /W:n 保存为默认设置。
/TBD :: 等待定义共享名称(重试错误 67)。
/LFSM :: 在低可用空间模式下运行,启用复制暂停和继续(参见“备注”)。
/LFSM:n[KMG] :: /LFSM,指定下限大小(以 n [K:kilo、M:mega、G:giga] 字节为单位)。
4、日志记录选项
::
/L :: 仅列出 - 不复制、添加时间戳或删除任何文件。
/X :: 报告所有多余的文件,而不只是选中的文件。
/V :: 生成详细输出,同时显示跳过的文件。
/TS :: 在输出中包含源文件的时间戳。
/FP :: 在输出中包含文件的完整路径名称。
/BYTES :: 以字节打印大小。
/NS :: 无大小 - 不记录文件大小。
/NC :: 无类别 - 不记录文件类别。
/NFL :: 无文件列表 - 不记录文件名。
/NDL :: 无目录列表 - 不记录目录名称。
/NP :: 无进度 - 不显示已复制的百分比。
/ETA :: 显示复制文件的预期到达时间。
/LOG:文件 :: 将状态输出到日志文件(覆盖现有日志)。
/LOG+:文件 :: 将状态输出到日志文件(附加到现有日志中)。
/UNILOG:文件 :: 以 UNICODE 方式将状态输出到日志文件(覆盖现有日志)。
/UNILOG+:文件 :: 以 UNICODE 方式将状态输出到日志文件(附加到现有日志中)。
/TEE :: 输出到控制台窗口和日志文件。
/NJH :: 没有作业标头。
/NJS :: 没有作业摘要。
/UNICODE :: 以 UNICODE 方式输出状态。
5、作业选项
/JOB:作业名称 :: 从命名的作业文件中提取参数。
/SAVE:作业名称 :: 将参数保存到命名的作业文件
/QUIT :: 处理命令行后退出(以查看参数)。
/NOSD :: 未指定源目录。
/NODD :: 未指定目标目录。
/IF :: 包含以下文件。
6、备注
以前在卷的根目录上使用 /PURGE 或 /MIR 导致robocopy 也对“系统卷信息”目录内的文件应用所请求的操作。
现在不再是这种情形;如果指定了任何一项,则 robocopy 将跳过复制会话简要源目录和目标目录中具有该名称的任何文件或目录。
The modified files classification applies only when both source
and destination filesystems support change timestamps (e.g., NTFS)
and the source and destination files have different change times but are
otherwise the same. These files are not copied by default; specify /IM
to include them.
Using /LFSM requests robocopy to operate in 'low free space mode'.
In that mode, robocopy will pause whenever a file copy would cause the
destination volume's free space to go below a 'floor' value, which
can be explicitly specified by the LFSM:n[KMG] form of the flag.
If /LFSM is specified with no explicit floor value, the floor is set to
ten percent of the destination volume's size.
Low free space mode is incompatible with /MT, /EFSRAW, /B, and /ZB.
六 robocopy的GUI使用
[可以使用生成脚本]
下载:https://www.jb51.net/softs/852615.html(UtilitySpotlight2006_11.exe)
截图:
七 实例
1.复制源目录下所有文件及其子目录下所有文件(包括空目录)到目标目录
robocopy d:\work e:\back /e /yy
2.复制源目录下某种文件类型的文件到目标目录
robocopy d:\work e:\back *.txt *.doc *.bmp *.tif /s
3.复制时不包括某种类型的文件
robocopy d:\work e:\back /e /xf *.tmp *.bak
4.将文件夹移动到目标文件夹
robocopy d:\work e:\look /move /e
5.将操作过程输出为txt文件
robocopy d:\work e:\back /e /yy /log:123.txt
6.公司常用复制命令:将123目录下所有内容复制到456目录下,如果有文件重复则自动跳过,不需要加/yy参数
robocopy e:\123 f:\456 /e /tee /fp /v /np /ns /log+:copylog.txt
7 拷贝文件和目录且保留原来的时间属性(但是必须使用win7以后的版本才可以的)
robocopy.exe \\source\A \\dest\A /E /COPY:DAT /DCOPY:T
八 Robocopy详解
说实话,Windows系统自带的复制功能不仅功能简单,而且定制性也不强,每每在对大量文件进行复制、移动、备份时,总少不了繁杂往复的操作。不过幸好,微软意识到了这一点,为我们提供了一款很强力的复制备份工具:robocopy。
robocopy已被Windows Vista、Windows 7以及Windows Server 2008所集成,网上有网友制作的GUI,有兴趣的童鞋可以下载尝试一下。另外,还在使用xp的童鞋直接在网上下载robocopy GUI吧。
运行方法有很多种,可以使用Win+R,在“运行”窗口中直接输入命令;或者先启动CMD命令提示符,在命令提示符窗口中输入命令;另外一种则是在文本编辑器(如:记事本)中输入相应命令,保存为*.bat批处理文件双击运行即可。
推荐使用批处理文件,这样子不仅方便了我们保存和修改,还方便了随时随地进行调用。
废话不多说,下面我们就开始实战练习。
今天一早,经理从Boss那里得到一个任务,说是公司要对一个项目制作一些文档,需要这个项目的一些原始资料。于是,这个任务又从经理那里下派到我手上,按他的要求,需要尽可能快的从有关文件夹中取出合适的内容,并且复制到他U盘(盘符为H)Project文件夹中。其具体要求是整理出:txt文本文件、Word文档、JPG、BMP、TIF图像。他倒是说得简单,我面对的可是一个有上百个子文件夹至少5层目录结构的超级复杂文件目录树。
好吧,为了能顺利完成,放第一招:
第一招 我想咋复制就咋复制
robocopy D:\Document H:\Project *.txt *.doc *.jpg *.bmp *.tif /s
说明:
参数"/s"的作用是“除了空文件夹以外的所有子目录”。若要将文件夹下的所有文件(包括空文件夹)全部复制到目标文件夹,则上述命令应改为:
robocopy D:\Document E:\Home /e
此处参数"/e"的表示所有子目录(包括空文件夹)。
第一个任务很顺利就完成,经理把我叫到办公室,对我的执行效率表示出非常满意,我长出一口气,气刚出到一半,经理就开口了:“还要做个项目概览,你去把一二级目录下的内容再单独整理出来,还拷贝到我的U盘里。”我晕……
刚才小试牛刀,现在见招拆招,放第二招:
第二招 复制文件随心所欲
robocopy D:\Document H:\Project *.txt *.doc *.jpg *.bmp *.tif /s /lev:2
说明:
参数"/lev"表示复制的层级,比如指定为2级,则两层目录下的文件会被复制,更多级下面的则会被忽略。
经过一番折腾,经理对我的满意度算是越来越高了,但对于他而言,总是有解决不尽、也永远搞不清的问题,诸如他会在家选择文件之后按下Ctrl+C,然后第二天来公司在公司电脑上猛按Crtl+V。哎,这不,他又有新问题了。经过刚才几次复制,他那弱小的U盘已经经不起更多折腾,肚子塞的满满的,可是还有大批文件需要用U盘拷贝,经理他就挠着头,想啊想,想啊想,终于想出一个办法来,先把不用的文件拷贝到计算机上,再把垃圾文件删除掉!嗯~还真是个好办法,于是乎,他又叫来了我……
同样,怕什么~~~接着放招:
第三招 垃圾文件我可不要
其实实现这个要求很简单,直接在复制的过程中筛选出垃圾文件并且deny掉就好啦~
用如下命令吧:
robocopy H:\Work D:\Work /e /xf *.tmp *.bak
说明:
参数"/xf"意为指定不执行复制操作的文件类型,文件名支持通配符。如果使用参数"/xd",则表示排除指定的文件夹。
又一项任务顺利完成,我哼着小曲回到了自己的办公室,安安稳稳的坐在椅子上听起音乐。一个上午连续被经理所赞赏,那心情叫一个好啊,索性就用音箱吧~动人的旋律不仅飘到我耳朵里,也到了隔壁同事耳朵里,这不,隔壁同事又来了,他表示对我艺术审美很是赞赏,同时,还想拷走我所有音乐文件……
天,我的音乐文件夹有好几个G之大,而他拿来的U盘才有碎碎的2G,这可怎么是好呢~
想来想去,他觉得只好忍痛割爱,不要MV了。只是还有一个问题,如果用文件类型排除,那将非常麻烦,在这种情况下,我选择了以下方法:
第四招 大文件我也不要
robocopy F:\music H:\music /e /max:10000000
说明:
使用参数"/max",可以选择文件大小上限,其单位为byte。如果是"/min",限定了文件大小的下限。两个参数可以同时使用,限制出所需复制的文件大小的范围。
复制指定修改时间的文件
在日常使用中,免不了要通过文件修改时间筛选出最近的文件。如何实现此功能?通过下列命令:
robocopy D:\Document H:\Project /maxage:5
此条命令的意思为将D:Document下修改时间在5天内的文件复制到H:Project下。
参数"/maxage"表示距离今天最远的修改时间,凡是修改时间比这个限制还要早的那些文件都不会被复制。参数"/maxage"可以接受的字符有数字,或者是日期,表示天数时数字要小于1900,表示日期时需要使用"YYYYMMDD"格式。另外一个与之相对应的参数是"/minage",表示距离今天最近的修改时间限制,比这个时间新的文件将不被复制。
因此,我们在实用环境下可以利用"/maxage"和"/minage"来共同限制时间范围。如下例:
robocopy D:\Document H:\Project /maxage:5 /minage:1
此命令则将欲复制的文件范围限定在修改时间在除今天意外的5天以内(是不是有点绕口……我实在描述不清楚了,各位看官请意会吧)。
完全拷贝
在Windows默认的复制粘贴下,如果已存在一个同名文件夹,系统会进行增量复制,而不会进行文件夹的替换操作。如果我们需要使目标文件夹与源文件夹完全相同,也就是说在复制的同时也删除在目标文件夹里存在但源文件夹里并没有的文件。则需要使用以下命令:
robocopy D:\Document H:\Project /mir
参数"/mir"的作用等同于"/purge /e","/purge"表示清理目标文件夹内有而源文件夹里没有的文件和文件夹。通过这个命令,能保证源文件夹和目标文件夹在结构与内容上完全相同。此参数对于创建镜像备份时是非常有用的。
移动文件
需要移动文件夹,也就是剪贴,需要使用另外两个参数,先看下例:
robocopy D:\Document H:\Project /move /e
参数"/move"意为移动,而"/e"则表示复制所有子目录包括空文件夹(这一点上篇文章有讲)。
只拷贝文档结构
有时我们只需要拷贝一个多级目录的目录树,或者说只需要它的结构,而不需要它的内容,参考如下命令:
robocopy c:\windows /s /create c:\empty\windows
这样,我们就创建了整个Windows文件夹的目录结构。其中,使用了"/creat"参数,此参数作用即为生成空的文件结构。
还有另外一种剑走偏锋的实现方法:
robocopy c:\windows c:\empty\windows /e /lev:5 /minage:19000101
这是使用了普通的复制方法,指定5层目录,但是却限制了一个机器上不可能有的一个文件修改日期。这样,robocopy就只会拷贝走目录结构,因无文件符合其修改时间限制,因而不会有文件被复制。
不复制隐藏文件
个别情况下文件夹中存在隐私内容,在复制的同时又希望被ignore,因为robocopy支持属性操作,所以只需调用相关参数即可。见下例:
robocopy D:\Photo H:\Photo /e /xa:h
参数"/xa:h"表示将具有隐藏属性的排除出欲复制的范围,与之相对应的是参数"/ia",表示只复制包括指定属性的文件。
可用的属性有;R只读、A存档、S系统、H隐藏等。
robocopy C:\windows F:\WindowsSysFile /ia:rs
此命令只会将具有只读属性的系统文件复制,而不会操作其他文件。
上文说道,robocopy具有对属性操作的能力,因此,在复制的同时也可以指定文件属性。
使用参数"/A+"与"/A-",功能分别是将给定的属性添加到复制文件,以及,从复制文件中删除给定的属性。
例如:
robocopy C:\windows F:\WindowsSysFile /e /A-:rsh
这样,不仅将所有文件进行了复制,也删除了诸如只读、系统、隐藏等属性,方便了我们在复制之后对文件进行操作和编辑等。
九、软件对比
【复制测试】
我将一共达7.9G的《阿凡达》高清电影文件,通过Robocopy、系统内置的复制功能和Terecopy三项分别复制到相同的目的地,复制过程中基本没有进行其他系统操作,得出复制完成所需要的时间并比较
1、通过Robocopy命令复制文件,使用最大线程128,花费的时间为6分02秒
2、使用系统内置的文件复制功能,使用秒表计时显示时间为6分22秒
3、使用Terecopy复制,显示使用5分32秒
测试速度大小结果:Terecopy > Robocopy命令 > 内置复制功能,可见Robocopy与专业的复制软件在速度上有一定的差距,而且易用性比较差。但是在没有安装其他复制软件的情况下,要想快速复制大量的文件,Robocopy命令还是一个不错的选择。
十、实例代码
因为篇幅有限,特新开一篇文章。