天天看点

批处理命令--玩转目录之robocopy

上篇我们学习了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

列出完整的参数说明:可以用「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 ,不推荐。

继续阅读