robocopy 是什么
robocopy(Robust File Copy)是 Windows 自带的目录复制与同步工具,随系统内置在 %SystemRoot%\System32 下,用来替代 xcopy 在长路径、权限与失败重试上的短板。它按目录树比对源与目标,只搬运有差异的部分,支持多线程、断点续传、失败重试与完整日志,是 Windows 侧做数据迁移、定期备份、增量同步的首选。与 copy、xcopy 最大的差别在结果表达:robocopy 用退出码位图汇报,0 到 7 都算正常,写脚本时必须按位理解而不是照搬「非 0 即失败」。
基本信息
| 适用平台 | Windows Vista / Server 2008 及以后,Windows 7 起参数最全 |
|---|---|
| 语法 | robocopy 源 目标 [文件...] [选项] |
| 常用选项 | /E 含空目录、/MT[:n] 多线程、/R:n 重试次数、/W:n 重试间隔秒、/Z 断点续传、/MIR 镜像、/L 预演、/LOG: 写日志 |
| 退出码 | 0-7 属正常范围,8 及以上表示至少一处失败 |
| 权限 | 复制到受保护目录、保留所有者与 ACL 时需要管理员 |
典型使用场景
- 服务器数据迁移:整盘整目录搬到新盘,用 /MT 提速并加 /LOG 留审计记录
- 定期增量备份:配合任务计划每天跑一次 /E,只同步有变化的文件
- 目录镜像:用 /MIR 让备份目录与源保持完全一致(会删除目标里多余的项)
- 大批小文件复制:几十万个小文件用资源管理器极慢,多线程能显著缩短时间
- 保留权限复制:需要带上 ACL、所有者与时间戳时,替代 copy 与 xcopy
- 移动数据:/MOVE 在一次作业里完成复制与删除源,省去手工清理
常用示例
常用示例
:: 基础复制:整树含空目录,失败重试 2 次、每次间隔 2 秒
robocopy D:\Src D:\Dst /E /R:2 /W:2
:: 多线程加日志,适合大批量迁移
robocopy D:\Src D:\Dst /E /MT:16 /LOG:D:\copy.log /TEE
:: 预演:只列出将要复制的文件,不落盘
robocopy D:\Src D:\Dst /E /L /V
:: 镜像同步(目标多余文件会被删除)
robocopy D:\Src D:\Dst /MIR /R:2 /W:2
:: 移动:复制成功后删除源文件
robocopy D:\Src D:\Dst /E /MOVE退出码速查
| 退出码 | 含义 | 脚本处理 |
|---|---|---|
| 0 | 源与目标一致,没有文件需要复制 | 视为成功 |
| 1 | 有文件被成功复制 | 视为成功 |
| 2 | 目标里存在源中没有的额外项 | 纯复制可忽略,镜像场景要关注 |
| 3 | 1 与 2 同时成立 | 视为成功 |
| 4 | 检测到不匹配的文件或目录 | 核对清单,可能需要人工确认 |
| 8 | 有文件复制失败(被占用、无权限等) | 按失败处理,查日志定位 |
| 16 | 严重错误,作业未能完成 | 按失败处理,先解决路径或权限 |
robocopy 默认重试次数极高、间隔也很长:遇到被占用的文件时会反复等待,脚本看起来像卡死。请显式写 /R:2 /W:2 之类的参数,跨网络复制时尤其重要。
/MIR 与 /MOVE 都会造成删除:/MIR 清掉目标里多余的项,/MOVE 在成功后删除源文件。执行前先用 /L 预演核对清单,并确认源与目标没有写反。
日志三兄弟配合使用:/LOG:文件 每次覆盖写,/LOG+:文件 追加,/TEE 让内容同时输出到控制台。自动化任务里建议用 /LOG+ 保留历史,便于事后追溯。
文件选择开关
| 开关 | 作用 | 适用场景 |
|---|---|---|
| /E | 复制所有子目录,含空目录 | 整树迁移的默认搭配,保证目录结构完整 |
| /S | 复制子目录但跳过空目录 | 只关心有内容的目录时使用 |
| /MIR | 等价于 /E 加 /PURGE,令目标与源一致 | 镜像备份,会删除目标里多余的内容 |
| /MOV 与 /MOVE | /MOV 成功后删源文件,/MOVE 连目录一起清理 | 数据搬迁,省去手工删除源 |
| /XO 与 /XN | 排除较旧文件 / 排除较新文件 | 防止用旧版本覆盖新版本,避免误覆盖 |
| /XD 与 /XF | 排除指定目录 / 排除指定文件 | 跳过缓存、临时文件与页面文件等无意义内容 |
重试策略按链路质量调:局域网内 /R:1 /W:1 就够,跨专线或跨云复制建议 /R:3 /W:5 并叠加 /Z 断点续传,链路抖动后可从中断处继续,而不是整文件重传。