三个命令怎么选
copy、xcopy、robocopy 分属三代复制工具:copy 处理单文件与二进制合并,xcopy 能复制目录树但没有重试与日志,robocopy 面向生产同步,支持重试、多线程、日志、权限保留与镜像。选择依据是数据规模、是否要保留权限、失败后是否需要自动重试。
退出码怎么判
robocopy 的退出码是位标志:0 表示无变化,1 表示有文件复制成功,2 表示目标侧存在额外文件,4 表示有不匹配项,8 及以上才是复制失败。脚本判定应写成“退出码大于等于 8 才算失败”,把所有非 0 都当错误是最常见的误报来源;copy 与 xcopy 只有 0 与 1 的语义,信息量远小于 robocopy。
基本信息
| 适用平台 | copy 与 xcopy 各版本内置;robocopy 自 Windows Vista / Server 2008 起内置 |
|---|---|
| 语法 | copy 源 目标;xcopy 源 目标 /E /I;robocopy 源 目标 /E /COPY:DAT /R:2 /W:2 /LOG:日志 |
| 权限保留 | 只有 robocopy 的 /COPYALL(或 /COPY:DATS)能带上 ACL 与属主 |
| 退出码 | robocopy 0-7 均属正常,8 及以上才是错误 |
典型使用场景
- 复制单个或少量文件:copy 最短最直接
- 目标环境缺少 robocopy 时的兜底:用 xcopy 复制目录树
- 生产同步:需要失败重试、留日志、保留权限,用 robocopy
- 两盘镜像或部署目录覆盖:robocopy /MIR
- 排除目录、只复制更新过的文件:robocopy /XD 与 /XO 更完整
同一任务的三种写法
同一任务的三种写法
copy D:\a\x.txt D:\b\ # 单文件复制
xcopy D:\a D:\b /E /I /Y # 目录树复制,老系统兜底
robocopy D:\a D:\b /E /COPY:DAT /R:2 /W:2 /LOG:D:\b\copy.log # 生产同步
robocopy D:\a D:\b /MIR /COPYALL # 镜像并保留权限与属主
robocopy D:\a D:\b /E /XD cache /XO # 排除 cache,只复制更新的文件三类工具对照
| 维度 | copy | xcopy | robocopy |
|---|---|---|---|
| 目录树 | 不支持 | 支持 /E | 支持 /E 或 /MIR |
| 权限与属主 | 不保留 | 部分支持且不稳定 | 支持 /COPYALL |
| 失败重试 | 无 | 无 | 有 /R 与 /W |
| 日志 | 无 | 无 | 有 /LOG 与 /TEE |
| 多线程 | 无 | 无 | 有 /MT |
| 退出码 | 0/1 | 0/1 等 | 0-7 正常,8 及以上错误 |
老脚本从 xcopy 迁到 robocopy 时注意参数并非一一对应:xcopy /S 不复制空目录,而 robocopy /E 会复制空目录,替换后目录结构可能变化。
新脚本一律优先 robocopy:退出码、日志与重试机制对自动化最友好;只有目标环境缺 robocopy 时才退回 xcopy。
/MIR 会删除目标侧多余文件:把源与目标写反会直接清空生产目录,脚本里应把两个路径写成命名参数并做存在性校验。