Robocopy.exe
是微软在Windows server 2003 Resource Kit Tools
里面提供的程序来做备份的,Windows Vista
系统中已经自带了这个命令行程序。
含义
Microsoft Windows
中内置的传统的“复制和粘贴”功能有一些局限性。它在执行简单的任务(将一个文档从一个目录移动到另一个目录等)时处理得还好,但缺乏 IT 专业人员在工作场所所需的高级功能。例如,复制和粘贴操作不包括任何高级复原功能,所以不允许从短暂的网络中断后进行恢复。特别是当复制完整的目录时,它还是一个要么全有要么全无的问题。而使用 UI,您无法选择仅复制新文件还是复制更新过的文件。您可以复制单个的文件、整个目录或什么也不复制。
启动Robocopy
。这个强大的工具包含在 Microsoft Windows Server 2003 Resource Kit Tools
中(已经集成到Windows Vista与Windows 7),考虑到了上述所有高级功能以及更多功能。Robocopy
支持更多重要的文件复制任务,从而能够真正简化您的工作。我想您将发现最大的好处是,可以创建两个文件结构(可以根据您的选择包括所有子文件夹和文件)的完全的镜像副本而不复制任何不需要的文件。只复制源位置中的新文件或更新后的文件。Robocopy
还允许您保留所有相关文件信息,包括日期和时间戳、安全访问控制列表 (ACL
)及更多内容。 [1]
RoboCopy命令的参数详细说明
Usage :: ROBOCOPY source destination [file [file]...] [options]
用法:: ROBOCOPY源目录 [文件 [文件]...] [选项]
源:: 源目录(驱动器:\路径或\服务器\共享\路径)。
目标:: 目标目录(驱动器:\路径或\服务器\共享\路径)。
文件:: 要复制的文件(名称/通配符: 默认为 “*.*
”)。
:
注意,robocopy
复制特定文件时文件名列在后面,这是它与copy
的一个区别
例如:copy E:\1.txt E:\A
(复制E盘目录下1.txt
文件到E盘A目录)
则写作:robocopy E:\1.txt E:\A 1.txt
::
复制选项:
::
/S
:: 复制子目录,但不复制空的子目录。
/E
:: 复制子目录,包括空的子目录。
/LEV:n
:: 仅复制源目录树的前 n 层。
/Z
:: 在可重新启动模式下复制文件。
/B
:: 在备份模式下复制文件。
/ZB
:: 使用可重新启动模式;如果拒绝访问,请使用备份模式。
/EFSRAW
:: 在 EFS RAW 模式下复制所有加密的文件。
/COPY
:复制标记:: 要复制的文件内容(默认为/COPY:DAT
)。
(复制标记: D=数据,A=属性,T=时间戳)。
(S=安全=NTFS ACL,O=所有者信息,U=审核信息)。
/DCOPY:T
:: 复制目录时间戳。
/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),以释放低速线路上的带宽。
::
::
文件选择选项:
::
/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
:: 排除文件的接合点。
::
重试选项
:
::
/R:n
:: 失败副本的重试次数: 默认为 1 百万。
/W:n
:: 两次重试间的等待时间: 默认为 30 秒。
/REG
:: 将注册表中的 /R:n 和 /W:n 保存为默认设置。
/TBD
:: 等待定义共享名称(重试错误 67)。
::
::
日志记录选项:
::
/L
:: 仅列出 - 不复制、添加时间戳或删除任何文件。
/X
:: 报告所有多余的文件,而不只是选中的文件。
/V
:: 生成详细输出,同时显示跳过的文件。
/TS
:: 在输出中包含源文件的时间戳。
/FP
:: 在输出中包含文件的完整路径名称。
/BYTES
:: 以字节打印大小。
/NS
:: 无大小 - 不记录文件大小。
/NC
:: 无类别 - 不记录文件类别。
/NFL
:: 无文件列表 - 不记录文件名。
/NDL
:: 无目录列表 - 不记录目录名称。
/NP
:: 无进度 - 不显示已复制的百分比。
/ETA
:: 显示复制文件的预期到达时间。
/LOG
:文件:: 将状态输出到日志文件(覆盖现有日志)。
/LOG+
:文件:: 将状态输出到日志文件(附加到现有日志中)。
/UNILOG
:文件:: 以 UNICODE 方式将状态输出到日志文件(覆盖现有日志)。
/UNILOG+
:文件:: 以 UNICODE 方式将状态输出到日志文件(附加到现有日志中)。
/TEE
:: 输出到控制台窗口和日志文件。
/NJH
:: 没有作业标头。
/NJS
:: 没有作业摘要。
/UNICODE
:: 以 UNICODE 方式输出状态。
::
::
作业选项:
:
::
/JOB
:作业名称:: 从命名的作业文件中提取参数。
/SAVE
:作业名称:: 将参数保存到命名的作业文件
/QUIT
:: 处理命令行后退出(以查看参数)。
/NOSD
:: 未指定源目录。
/NODD
:: 未指定目标目录。
/IF
:: 包含以下文件。
/MT
:: 启动多线程任务(默认8个线程,最大可设128个)。
::
::
操作实例:
:
::
实例一:文件,想怎么复制就怎么复制
[实现效果]
随时将源文件夹中的纯文本(TXT)、Word文档(DOC)还有BMP、TIF图像文件复制到目标文件夹中,这是在“资源管理器”中直接拖放所做不到的。[简单命令]
robocopy d:\work e:\back *.txt *.doc *.bmp *.tif /s
[参数讲解]
将d:\work
文件下的TXT、DOC、BMP、TIF
复制到e:\back
文件夹,其他文件则不复制。/s是表示包括
除空文件下的所有子目录,如果没有则仅复制d:\work下的文件而不包括子目录。
[举一反三]
(1)如果要将文件夹下的所有文件包括空文件夹全部复制到目标文件夹,命令为:robocopy
d:\work e:\back /e
/e
表示复制所有子目录包括空文件夹。
(2)如果只想复制两个层级内的文件(再下的层级里的文件则不拷贝),输入命令:robocopy
d:\work e:\back /e /lev:2
/lev:2
表示复制的层级,比如指定层级后d:\work\soft
(二级)下的文件会被复制,而d:\work\soft\office(***)
下的文件则不被复制。
实例二:垃圾文件不复制
[实现效果]在备份数据时,不可避免会将类似于*.bak、*.tmp
的垃圾文件也复制到目标文件夹,用Robocopy
可以将我们经常碰到的垃圾文件在拷贝时就清理出家门,从而生成一个干干净净的文件夹。
[简单命令]
robocopy d:\work e:\back /e /xf *.tmp *.bak
[参数讲解]
/xf
为指定不执行复制操作的文件类型,后面的文件名支持通配符。如果参数为/xd,则表示排除后面指定的文件夹。
实例三:大文件 我不要
[实现效果]
复制的时候,为了节省时间,需要将一些大文件暂时不拷贝,等有空闲时间时,再执行复制操作不迟。
[简单命令]
robocopy d:\work e:\back /e /max:6000000
[参数讲解]
仅复制不大于6000000bytes的文件,/max:
后直接接数值,数值单位为byte
。如果是/min:1000
,则复制不小于1000bytes
的文件。两个参数可以同时使用,界定复制文件大小的范围。
实例四:只要这一周修改的文件
[实现效果]
这一周处理了哪些文档?编辑了那些文件?将这些修改了的文档复制到一个文件夹下,再好好回味一下。本例就是要将d:\work中最近七天内新建或修改了的TXT、DOC、XLS、PPT等文档,复制到e:\look
目录下。
[简单命令]
robocopy d:\work e:\look /s *.txt *.doc *.xls *.ppt /maxage:7
[参数讲解]
/maxage
:表示最远修改时间的,修改时间比这个还要旧的文件将不会被复制。/maxage
:后可接数字,也可以接日期,数字小于1900时表示天数,否则就得用YYYYMMDD来表示具体的日期如/maxage:20040210
表示2004年2月10日后被修改的文件才允许复制。与之相对应的参数
是/minage
,表示最近修改时间,比这个时间新的文件将不被复制。
[举一反三]
robocopy d:\work e:\look /s *.txt *.doc *.xls *.ppt /maxage:7 /minage:1
则表示近七天内除今天外修改的文件才允许被复制。
与修改时间相对的还有最近访问时间,/maxage
指最远访问时间,比这个时间老的文件将不被复制。
/minage
是指最近访问时间,比这个时间新的文件将不被复制。
实例五:我的文档排排站
[实现效果]
上例中复制时,所有的文档都会带来本身的路径信息,文档是会将其所存放的文件夹也复制过来。
这给我们的翻阅查看带来很多不便,得单击多层文件夹才能看到文件,能不能将所有的文档直接复制到一个文件夹下呢?这个需要用XXCOPY来实现。
[简单命令]
xxcopy d:\work e:\look /s /in*.txt /in*.doc /sg /yy /da:2004-02-02 /DB:2004-02-10/DA:1997-01-01
[参数讲解]
此命令将d:\work
中从2004年2月2日到2月10生成的 TXT、DOC
文件全部直接复制到e:\look
目录下,不新建子文件夹,打开e:\look
就能看到所有文件。XXCOPY
和Robocopy
的语法参数还是有较大差异的,表示指定文件类型时,XXCOPY
会用/in*.*
,表示日期时/da
为在指定时间后,/db
为在指定时间前,日期的表示为YYYY- MM-DD
。
另外,/sg
表示复制文件到同一文件夹,/yy
表示在所有要求用户应答的地方都自动认为是Yes
,在执行过程中不需要用户干预。
实例六:完全克隆
[实现效果]
我们一般采取的复制方式默认是增量复制,即根据文件的大小、修改时间将源文件夹里的内容向目标文件夹复制,久而久之,目标文件夹里就可能存在大量源件夹里早已经删除且无用的文件和文件夹。
如果要让备份完全相同,即拷贝时删除在目标文件夹里存在但源文件夹里并没有的文件。
[简单命令]
robcopy d:\work e:\look /mir
[参数讲解]
/mir
的作用等同于/purge /e
,/purge
表示清理目标文件夹有而源文件夹里没有的文件(夹)。通过这个命令,能保证源文件夹和目标文件夹结构与文件完全相同。这在创建镜像备份时,非常有用。
实例七:移动文件
[实现效果]
我们前面讲的都是复制,如果我们要将文件夹移动到目标文件夹,如何操作呢?
[简单命令]
robocopy d:\work e:\look /move /e
[参数讲解]
其中,/move
表示移动。
实例八:我只要文件夹骨架
[实现效果]
笔者的工作需要周期性地新建和整理大量的文件夹,每次的文件夹结构一样,只是文件不尽相同。
如果是以前,就得一个一个简单重复去制作,而现在就不需要了。Robocopy和XXCOPY可以让你轻松实现复制文件夹结构。
[简单命令]
xxcopy d:\work e:\mystruct /t /yy /dl3
[参数讲解]
将d:\work
的三层文件夹结构复制到e:\mystruct
中。其中/t表示创建文件夹结构,/dl3
表示复制的文件夹结构为***,数字可以自行输入,如果没有此参数,默认建立整个文件夹结构。
Robocopy创建文件夹相对要麻烦一些,/create
参数不仅要创建结构,还要创建文件夹下所有文件的0字节文件,并非真正的结构,我们只好剑走偏锋了。
robocopy d:\work e:\mystruct /e /lev:3 /minage:19000101
为Robocopy指定一个不可能创建文件的时间,因为有参数/e 的作用,虽然没有文件符合要求(你机器里没有早于1900年1月1日的文件),但Robocopy还是会忠实地创建文件夹,这样就达到了生成文件夹结构的目的。另外,/lev:3表示复制文件夹的层级,同样可以自行输入。
实例九:隐藏文件我不要
[实现效果]
在默认状态下,隐藏文件是并不显示的,但在复制的过程中,它还会随着文件夹一起被复制。可不可以将这些隐藏文件排除在复制范围之外呢?
[简单命令]
robocopy d:\work e:\back /e /xa:h
[参数讲解]
Robocopy支持对属性进行操作。上面的命令将复制源文件夹中全部文件,但全部具有隐藏属性的文件将不会被复制。/xa:h,表示将具有隐藏属性的排除出复制范围,与之相对应的是/ia,表示包括只对拥有指定属性的执行操作。属性有R:只读,A:存档,S:系统,H:隐藏等几种供选择。
[举一反三]
(1)此外,Robocopy还有/a+、/a-等参数对文件属性进行操作,分别表示在文件被拷贝后为文件添加、去除某属性。
robocopy d:\work e:\back /ia:rs
表示只复制具有只读和系统属性的文件。
(2)robocopy c: d: /-a:rsh
表示将文件拷贝到D盘后,将拷贝生成的文件的只读、系统、隐藏属性去掉,以方便查看和修改。
实例十:NTFS权限跟着走
[实现效果]
在使用Windows 2000、Windows XP时,在多用户使用一台电脑时或管理服务器时,经常要为文件夹指定用户访问和修改的权限(如图1,需要分区为NTFS)。不过,用一般的复制方式无法保留我们设置的权限,这在服务器备份时意味着我们得重新设置用户权限。不过,Robocopy可以让我们在复制文件的时候,将属性、用户权限、所有者都可以一并复制到目标文件夹中。
[简单命令]
robocopy d:\work e:\back /e /copyall
[参数讲解]
/copyall
等于/copy:datsou
,表示将所有源文件夹的信息复制到目标文件夹中,其中D:文件数据,A:文件属性,T:时间信息,S:权限信息,O:所有者信息,U:审核信息。
[举一反三]
如果源文件夹的权限被修改,需要同样更新目标文件夹的权限时,我们不必再重复复制,只需输入
robocopy d:\work e:\back /is /copy:sou
如果没有/copy
参数,默认为/copy:dat
,没有后面三项的信息。
实例十一:集中备份到文件服务器
[实现效果]
希望每天能够把相应数据备份到文件服务器上,以免数据丢失。
[简单命令]
robocopy d:\work \ctips_serverarticlesshare/e /copyall
[参数讲解]
从中可以看出,robocopy
完全支持文件服务器共享文件夹数据的拷贝。
[举一反三]
(1)如果我们创建了一个环境变量,如定义%databack%
为\ctips_serverarticles\back
,那只要输入相应的命令:robocopy d:\work%databack% /e /copyall
即可把d:\work
下的文件全部备份到\ctips_serverarticles\back
下。当然,如果\ctips_serverarticles\back
空间不够时,只要更换环境变量的值到其他文件夹,如\ctips_serverarticles ewbac
k,上述命令无需更改就可以反数据拷贝到新的文件夹中。
(2)如果你只想把数据备份到共享文件夹中以你的机器名为名字的共享文件夹中,使用xxcopy
会更方便:xxcopy d:\work\ctips_serverarticles/$HOST$ /e /yy
其中/$HOST$
表示你的机器名,如你的机器名为CTIPS_SYJ
,那会把d:\work
文件夹下的文件拷贝到\ctips_serverarticles\CTIPS_SYJ
文件夹下。如果你的机器名为CTIPS_MLB
,那执行上述命令后就可以把d:\work
文件夹下的文件拷贝到\ctips_serverarticles\CTIPS_MLB
文件夹下。由于同局域网内的机器名字不会相同,执行上述命令后就可以保证数据不会被拷贝到同一文件夹下。
实例十二:一动就备份
[实现效果]
有些工作内容非常重要,需要时时刻刻注意备份,可是我们哪里有这么好记性和耐性呢?这事,还是交给 Robocopy
来做吧。Robocopy
能时时监视要备份的文件夹,只要文件夹修改到一定时间和程序,Robocopy
就会立即开始备份。它会一直监视文件夹,除非用户自己终止。
[简单命令]
robocopy d:\work e:\back/e /copyall /mot:1 /mon:2
[参数讲解]
上述命令表示复制文件夹所有信息到目标文件夹并进行监视。执行此命令后,命令提示符窗口如图2所示。一旦时间过了一分钟,并且源文件夹至少有或2处以上的修改,Robocopy
就会自动启动另一个进程,执行上述备份操作。Robocopy
能监视源文件夹结构、文件和文件夹名称、大小、最后修改时间,在这里,甚至连属性和权限等信息被修改时,Robocopy
也会记为修改次数。
备份双友邻精彩5例-Robocopy
和xxcopy
全掌握
/mot
后接的是时间(分钟),是指Robocopy
执行操作的最短时间;/mon
后接的是最少文件修改个数。在监视过程中,会自动记录时间和修改的次数,只有同时符合以上两个条件时,Robocopy
才开始执行,执行完成后,这两个数据会自动清零,并重新开始监视文件夹,除非用户关闭命令提示符窗口或按下Ctrl+Break键。
[举一反三]
如果你要开机就监视并备份相应文件夹,则可以把上述命令放到“启动”组中。
实例十三:不到时间不备份
[实现效果]
复制的过程总会占用系统资源,如果能设置在自己不在电脑边上的时候开始复制备份,就会方便得多。比如,每天5:50下班,希望下班后,到达6点时,Robocopy
自动开始备份相应数据。
[简单命令]
robocopy d:\work e:\back /e /rh:1800-1830
[举一反三]
运行后,复制操作将会等待至指定时间开始(如图3)。其中,RH格式为/RH:hhmm-hhmm
,指定Robocopy
开始的时间段,在这个时间段外,拷贝会被暂停。时间为24小时格式,4个数字长,从0000
到2359
,而且两个数字不能相同。
实例十四:计划任务备份
以上的到时间备份、监视文件夹备份方式,每次重启系统会都会要重新执行以上命令,还远远不够智能,如果能和Windows的计划任务配合,所有问题就迎刃而解了。以我们要在每天10:00自动调用Robocopy开始监视备份文件夹为例,说一说计划任务与Robocopy的携手。
第一步:新建BAT文件
新建一个批处理文件autobak.bat
,输入如下命令
robocopy d:\work e:\back/e /copyall/mot:1 /mon:2
第二步:创建计划任务
选择“开始→设置→控制面板”,双击“任务计划”图标。把autobak.bat批处理文件拖放到“任务计划”窗口,然后双击新生成的autobak.bat图标,在弹出窗口中设置其属性。
第三步:设置开始时间
切换到“日程安排”标签,单击“任务计划”下拉列表框,从中选择“每天”,“开始时间”设置为10:00,单击“高级”可以设置起止的日期(如图4)。
通过上述设置后,到了设置的时间,机器就会自动备份执行批处理文件,自动备份并监视文件夹。
实例十五:清理文件也拿手
除了一般的复制功能,XXCOPY
还有文件清理功能,可以将不需要的文件快速清理出硬盘。以下命令会清除文件和文件夹,请先建立测试文件夹掌握其操作后再对文件夹进行操作。
1.清除所有无用文件
xxcopyd:\work*.tmp /s /h /yy /rs
/rs
表示不复制而直接从源文件夹中删除指定文件,/h
表示指定隐藏和系统文件。
2.清除文件夹
xxcopyc: emp /rmdir /db:2002-01-01 /yy
删除c: emp
中在2002年1月1日前的修改的文件夹。
3.删除空文件夹
xxcopy c: emp/rmdir /sz:0 /yy
删除c: emp
下所有空文件夹,/sz:0
指定大小为0
的文件(夹)。
4.删除0字节文件
xxcopy c: emp*.*/sz:0 /s /h /yy /rs
通过以上四种方式的组合,我们可以轻松实现对文件及文件夹的整理工作。
最后,还有一几个小技巧告诉你,希望能有利于你更好地使用XXCOPY
和Robocopy
。
★将命令变成任务
在Robocopy
加上“/save:任务名
”可以将当前操作记录为任务文件,通过“/job:任务名
”就可以方便调用,不需要再输入一长串的命令了。此任务文件可以用纯文本编辑器(如记事本)来编辑。
★将复制备份过程录下来
默认情况下,Robocopy
的操作过程只是在命令提示符中显示,我们可以让它把操作过程输出为TXT文件,加上“/log:文件名.txt
”即可。
xcopy
XCOPY
是COPY
的扩展,可以把指定的目录连文件和目录结构一并拷贝,但不能拷贝系统文件;使用时源盘符、源目标路径名、源文件名至少指定一个;选用/S
时对源目录下及其子目录下的所有文件进行COPY
。除非指定/E
参数,否则/S
不会拷贝空目录,若不指定/S
参数,则XCOPY
只拷贝源目录本身的文件,而不涉及其下的子目录;选用/V
参数时,对拷贝的扇区都进行较验,但速度会降低。
微软自带解释
这是来自网上的经过表格整理的CMD自带帮助:
XCOPY source [destination] | [/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]...] | |
source | 指定要复制的文件。 |
destination | 指定新文件的位置和/或名称。 |
/A | 只复制有存档属性集的文件, |
但不改变属性。 | |
/M | 只复制有存档属性集的文件, |
并关闭存档属性。 | |
/D:m-d-y | 复制在指定日期或指定日期以后更改的文件。 |
如果没有提供日期,只复制那些源时间 | |
比目标时间新的文件。 | |
/EXCLUDE:file1[+file2][+file3]... | 指定含有字符串的文件列表。每一个字符串 |
必须在文件的单独行中。如果有任何 | |
字符串与要被复制的文件的绝对路径 | |
相符,那个文件将不会得到复制。 | |
例如,指定如 \obj\ 或 .obj 的字符串会排除 | |
目录 obj 下面的所有文件或带有 | |
.obj 扩展名的文件。 | |
/P | 创建每个目标文件前提示。 |
/S | 复制目录和子目录,除了空的。 |
/E | 复制目录和子目录,包括空的。 |
与 /S /E 相同。可以用来修改 /T。 | |
/V | 验证每个新文件。 |
/W | 提示您在复制前按键。 |
/C | 即使有错误,也继续复制。 |
/I | 如果目标不存在,又在复制一个以上的文件, |
则假定目标一定是一个目录。 | |
/Q | 复制时不显示文件名。 |
/F | 复制时显示完整的源和目标文件名。 |
/L | 显示要复制的文件。 |
/G | 允许将没有经过加密的文件复制到 |
不支持加密的目标。 | |
/H | 也复制隐藏和系统文件。 |
/R | 覆盖只读文件。 |
/T | 创建目录结构,但不复制文件。 |
不包括空目录或子目录。/T /E 包括 | |
空目录和子目录。 | |
/U | 只复制已经存在于目标中的文件。 |
/K | 复制属性。一般的 Xcopy 会重置只读属性。 |
/N | 用生成的短名复制。 |
/O | 复制文件所有权和 ACL 信息。 |
/X | 复制文件审核设置(隐含 /O)。 |
/Y | 复制文件审核设置(隐含 /O)。 |
现存目标文件。 | |
【就是直接覆盖——Three~注】 | |
/-Y | 导致提示以确认改写一个 |
现存目标文件。 | |
/Z | 用重新启动模式复制网络文件。 |
命令行开关 /Y 可以预先在 COPYCMD 环境变量中设置。 | |
这可能被命令行上的 /-Y 改写。 | |
/B 复制符号链接本身与链接目标相对。 | |
/J 复制时不使用缓冲的 I/O。推荐复制大文件时使用。 |
语法
XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]
[/EXCLUDE:file1[+file2][+file3]...]
参数
Source
必需的。指定要复制的文件的位置和名称。该参数必须包含驱动器或路径。
Destination
指定要复制的文件的目标。该参数可以包含驱动器盘符和冒号、目录名、文件名或者它们的组合。
/w 在开始复制文件之前将显示以下消息并等待您的响应:
Press any key to begin copying file(s)
/p 提示您确认是否要创建每个目标文件。
/c 忽略错误。
/v 在写入目标文件时验证每个文件,以确保目标文件与源文件完全相同。
/q 禁止显示 xcopy 消息。
/f 复制时显示源文件名和目标文件名。
/l 显示要复制的文件列表。
/g 创建解密的目标文件。
/d [:mm-dd-yyyy]
只复制那些在指定日期或指定日期之后更改过的源文件。如果不包括 mm-dd-yyyy 值,xcopy 会复制比现有 Destination 文件新的所有 Source 文件。该命令行选项使您可以更新更改过的文件。
/u 只从 source 复制 destination 中已有的文件。
/i 如果 Source 是一个目录或包含通配符,而 Destination 不存在,xcopy 会假定destination 指定目录名并创建一个新目录。然后,xcopy 会将所有指定文件复制到新目录中。默认情况下,xcopy 将提示您指定 destination 是文件还是目录。
/s 复制非空的目录和子目录。如果省略 /s,xcopy 将在一个目录中工作。
/e 复制所有子目录,包括空目录。同时使用 /e、/s 和 /t 命令行选项。
/k 复制文件,如果源文件具有只读属性,则在目标文件中保留该属性。默认情况下,xcopy 会删除只读属性。
/r 复制只读文件。
/h 复制具有隐藏和系统文件属性的文件。默认情况下,xcopy 不复制隐藏或系统文件。
/a 只复制那些具有存档文件属性设置的源文件。/a 不修改源文件的存档文件属性。
/m 复制具有存档文件属性设置的源文件。与 /a 不同,/m 关闭在源中指定的文件的存档文件属性。
/n 使用 NTFS 短文件或目录名创建副本。将文件或目录从 NTFS 卷复制到 FAT 卷或者当目标文件系统需要 FAT 文件系统命名约定(即 8.3 个字符)时,需要 /n。目标文件系统可以是 FAT 或 NTFS。
/o 复制文件所有权与自由选择的访问控制列表(DACL) 信息。
/x 复制文件审核设置和系统访问控制列表(SACL) 信息(包含 /o)。
/exclude:filename1 [+[filename2]] [+[filename3]]
指定包含字符串的文件列表。
/y 禁止提示您确认要覆盖现存的目标文件。
/-y 提示您确认要覆盖现有目标文件。
/z 在可重启模式中通过网络复制。
/? 在命令提示符显示帮助。
/t 只复制子目录结构(即目录树),不复制文件。要复制空目录,必须包含 /e 命令行选项。
注释
使用 /v
XOX
拷贝后校验,会影响速度
使用 /exclude
列出每个文件的单独行中的每个字符串。如果列出的任何字符串与要复制的文件的绝对路径的任何部分匹配,就从复制进程排除该文件。例如,如果指定字符串 “\Obj”,则会排除 Obj 目录下的所有文件。如果指定字符串 “.obj”,则排除具有 .obj 扩展名的所有文件。
使用 /z
如果在复制过程中丢失连接(例如,如果用于连接的服务器脱机),复制过程将在重新建立连接后恢复。/z 也显示每个文件完成的复制操作的百分比。
在 COPYCMD
环境变量中使用 /y
可在 COPYCMD
环境变量中使用 /y
。在命令行上使用 /-y
可以覆盖该命令。默认情况下,会提示您覆盖,除非您从批处理脚本内运行 copy
。
复制加密的文件
将加密文件复制到不支持 EFS 的卷会导致错误。应首先解密文件或将文件复制到支持 EFS 的卷中。
附属文件
要附加文件,请指定单个目标文件,多个源文件(使用通配符或文件 1 + 文件 2 + 文件 3 格式)。
Destination
的默认值
如果省略 Destination,xcopy 命令将文件复制到当前目录。
指定 Destination
是文件还是目录
如果 Destination 不包含现有目录且不以反斜杠() 结尾,会出现下列消息:
Does destination specify a file name
or directory name on the target
(F = file, D = directory)?
如果要将一个或多个文件复制到一个文件,请按 F。如果要将一个或多个文件复制到一个目录,请按 D。
使用 /i
命令行选项可抑制显示该消息,从而导致 xcopy
认定在源是多个文件或一个目录的情况下,目标是一个目录。
使用 xcopy
命令设置 Destination
文件的存档属性
xcopy
命令创建具有存档属性设置的文件,无论源文件中是否设定了此属性。有关文件属性和 attrib
的详细信息,请参阅“”。
比较 xcopy
和 diskcopy
如果磁盘的子目录中包含文件,要将其复制到具有不同格式的磁盘中,请使用 xcopy 命令,而不要使用 diskcopy。因为 diskcopy 命令是一个磁道接一个磁道地复制磁盘,所以需要源磁盘和目标磁盘的格式必须相同。xcopy 命令没有该要求。通常情况下请使用 xcopy,除非您需要完整的磁盘图像副本。
退出码
要处理 xcopy
返回的退出码,请在批处理程序的 if
命令行上使用 errorlevel
参数。有关使用“if”处理退出码的批处理程序的范例,请参阅“”。下表列出每一个退出码和说明。
退出码 说明
0 文件复制没有错误。
1 没有找到要复制的文件。
2 用户按 CTRL+C 终止了 xcopy
。
4 出现了初始化错误。没有足够的内存或磁盘空间,或命令行上输入了无效的驱动器名称或语法。
5 出现了磁盘写入错误。
范例
要从驱动器A 将所有文件和子目录(包括所有空的子目录)复制到驱动器 B,请键入:
xcopy a:b: /e
要包含上一示例中的任何系统或隐藏文件,请按如下所示添加 /h
命令行选项:
xcopy a:b:/s /e /h
要使用 \Rawdata
目录中 1993 年 12 月 29 日后更改的文件更新 \Reports
目录中的文件,请键入:
xcopy \rawdata \reports /d:12-29-1993
要更新上例中 \Reports
中存在的所有文件,而不考虑日期,请键入:
xcopy \rawdata \reports /u
如果只想获得前一个命令要复制的文件列表,而不复制文件,请键入:
xcopy \rawdata \reports /d:12-29-1993 /l > xcopy.out
文件 Xcopy.out
列出了要复制的所有文件。
要将 \Customer
目录和所有子目录复制到网络驱动器H: 上的目录 \\Public\Address
,保留只读属性,并在 H: 上创建新文件时对您做出提示,请键入:
xcopy \customer h:\public\address /s /e /k /p
要发出上一个命令,确保在 \Address
目录不存在时 xcopy
会创建该目录,同时应抑制显示创建新目录时要显示的消息,请按如下所示添加 /i
命令行选项:
xcopy \customer h:\public\address /s /e /k /p /i
可以创建批处理程序执行 xcopy
操作,并且使用 if
批处理命令在发生错误时处理退出码。例如,以下的批处理程序使用可替换的 xcopy
源和目标参数:
@echo off
rem COPYIT.BAT transfers all files in all subdirectories of
rem the source drive or directory (%1) to the destination
rem drive or directory (%2)
xcopy %1 %2 /s /e
if errorlevel 4 goto lowmemory
if errorlevel 2 goto abort
if errorlevel 0 goto exit
:lowmemory
echo Insufficient memory to copy files or
echo invalid drive or command-line syntax.
goto exit
:abort
echo You pressed CTRL+C to end the copy operation.
goto exit
:exit
要使用该批处理程序将 C:\Prgmcode
目录和其子目录中的所有文件复制到驱动器 B
中,请键入:
copyit c:\prgmcode b:
该命令解释程序将用 C:\Prgmcode
替换 %1
与 B:。对于 %2
,然后使用 xcopy
与 /e
和 /s
命令行选项。如果 xcopy
遇到错误,批处理程序将读取退出码并转到相应 IF ERRORLEVEL
语句中指示的标签,然后显示相应的消息并退出批处理程序。
适用场合
在进行连同子目录一起拷贝时很有用,在拷贝大量文件时比COPY
命令要快得多。
精彩举例
精彩举例一
1、如只是单纯地复制 E:\
盘上所有文件到 D:\
盘上,就输入“ xcopy e:\*.* d: /s /h
"就行!如果在复制过程中,你不要他复制文件,那就按键盘热键“Ctrl " +“Pause /break” 二个热键 来中断复制。
精彩举例二
2、如果想把E:\ 盘上所有文件复制到D:\盘上,分为今天复制一点,明天再接着复制一些,后天再接着复制一些、或者是某种原因上次没有复制完成,今天想接着复制。(这种情况是经常在复制文件中出现的)那可怎么办才好呢?
那就输入“ xcopy e:\*.* d: /s /h /d /y
”就行。他能查出哪些文件是已经复制过去,哪些文件还没有复制过去的。
精彩举例三
3、当然我们也会碰到这种情况,一些文件我们已经修改过、网上面又有最新版本的。原来备份的那份文件我们要及时更新的时候。那怎么才能同步更新呢?当然我们可以把最新的好份文件复制过去,这也是一种解决办法。
如果修改的文件有很多的,自己到时候也记不清楚那份文件是更新过的。这么多的原来备份的那份文件都要更新,都要复制过去,可不是件省力气的活,而且容易出错和一些文件被忘记!
那和上面一样也同样输入" xcopy e:\*.* d: /s /h /d /y
"就行!
比如你想拷贝一些文件到另一个文件下,但是涉及到只想拷贝更新后的文件,之前的不要
例句:xcopy d:\1文件\. d:\2文件/s /e/d:02-13-2011
那么后面的日期代表 只拷贝2011年 2月13日之后更新的文件,并且以此日期为参考,之后都只拷贝新文件。
精彩举例四
4、还有一种情况我们经常也碰到的,因为复制某个文件出错或者这个文件在使用中,而停止了复制工作,(比如,复制C 盘上的 windows xp )我们这时候想跳过某个出错的文件和某个正在使用中文件而继续复制其他文件。
再多加入一个参数" /c
"就是 " xcopy e:\*.* d: /s /h /d /c /y
"就行!
精彩举例五
5、有时候我们想XCOPY
变为自动复制,并且复制完成后关闭电脑,可以建立一个批处理文件,新建文本文档,更名为XCOPY.BAT
当然扩展名原来是TXT
格式的要更名为BAT
在这个 XCOPY.BAT
中输入
xcopy e:\*.* d: /s /h /c /y
shutdown -s
然后双击xcopy.bat
运行它,你这时候可以出去玩啦。电脑会自己复制备份完成文件然后自动关闭电脑。
注意问题
下面就我遇到的一个例子说两个初学者容易遇到的问题。
1.我想用.bat
批处理来运行复制 我的QQ 个人信息文件夹的内容到D 盘。只要双击一下就可以了。
于是我就开始写xcopy
的命令,做了很久都没有成功,后来发现是,我的批处理文件名是xcopy.bat
,
所以特别提醒大家批处理的文件名不能是一个命令。。。
然后,我的代码
xcopy C:\Program Files\Tencent\QQ\我的QQ号 d:\我的QQ号 /e /h /d /y /r /v /f /k
pause
提示错误,原因是批处理里面的文件路径不能有“空格”,“Program Files
”就有了一个空格,而且字符长度不支持大于8个字符的文件或者文件夹名。解决方法是用用"路径",如下
2.这样就可以复制了。但是还有个问题,就是开始复制的时候,提示“请你选择“我的QQ号”的文件类型,(F,文件/D,目录)需要选择D 才可以。
原来xcopy
有合并和生成文件的功能,系统不知道你是需要文件夹还是文件,在产生分歧的时候就询问。不过这样对我们很麻烦。
解决方法:只要在目标文件夹后面加上\
就可以了,例如:
xcopy C:\Progra~1\Tencent\QQ\我的Q~1d:\我的QQ号\ /e /h /d /y /r /v /f /k
pause
注意的d:\我的QQ号\
这里有个斜杠