Robocopy实战文件备份
robocopy 是 windows 系统自带的一个强大的命令行文件夹/文件复制工具,它有非常多的参数可以配置。在数据同步中,robocopy 可用于编写自动同步脚本,如镜像同步目录 a 到目录 b,或增量同步 a 到 b 等,适合作为数据备份脚本。
目录
🔍robocopy 语法
robocopy <source> <destination> [<file>[ ...]] [<options>]
robocopy 原路径 目标路径 [文件[ ...]] [选项]
如果路径中有空格,路径需要用英文引号包围。如 "D:\my folder" 和 "D:\his folder"
🚀命令行参数速查
/S
常用于不希望删除目标目录的备份方式
使用 /s
来完整复制子目录,相当于直接两个文件夹之间复制粘贴,也相当于 Linux 上的递归复制;
相同文件,被源目录替换;源目录多的文件,目标目录不受影响;
例:模拟把 D:\a 文件夹内所有文件复制,粘贴到 D:\b 文件夹下,并替换同名文件,/MT:1 参数后面说明。
robocopy "D:\a" "D:\b" /S /MT:1
/B
不常用;
使用 /b
在备份模式下复制文件。 备份模式允许 Robocopy (ACL) 替代文件和文件夹权限设置。 这样,就可以复制你可能无权访问的文件,前提是该文件在具有足够权限的帐户下运行;
/MIR
常用于镜像备份文件夹,目标文件夹会与源文件夹保持一致。
使用 /mir
来镜像复制,将此选项与 /e 选项和目标目录结合使用,覆盖目标目录安全设置。
例:模拟把 D:\a 文件夹内所有文件复制,粘贴到 D:\b 文件夹下,并替换同名文件,并删除 b 内的多余文件。相当于让 b 完全保持与 a 相同的文件结构。
robocopy "D:\a" "D:\b" /MIR /MT:1
/MT
使用 /mt:2
指定复制时线程数为 2;
重要: 在一切机械硬盘,无论CMR垂直还是SMR叠瓦,都应当使用 /MT:1 开启单线程写入;固态硬盘也推荐使用此参数。对于SMR叠瓦盘,不开启 /MT:1 的默认 8 线程写入会大幅降低硬盘寿命;
/COPY
若不希望用管理员身份执行robocopy,可添加 /COPY:DT 参数,避免复制文件属性
使用 /copy:flag
指定要复制的文件属性。 此选项的有效值为:
D - 数据
A - 属性
T - 时间戳
S - NTFS 访问控制列表 (ACL)
O - 所有者信息
U - 审核信息此选项的默认值为
组合:
DAT (数据、属性和时间戳) 。
📝重要规则(必读)
下面这些非常重要
- 在一切机械硬盘,无论CMR垂直还是SMR叠瓦,都必须添加 /MT:1参数开启单线程写入;
- 使用批处理时,文件编码必须为 ANSI, GBK, GB18030 中的一种(GBK 和 ANSI 在 Windows 上等价,另外记得不要用 GB2312,那个字符不全)。
- 用管理员身份执行 robocopy 命令,或者使用 /COPY:DT 参数规避文件属性复制(但貌似有时候会不起效,推荐管理员身份);
- 在执行前,仔细检查 robocopy 命令,尤其是开启了 /MIR 参数的命令,防止意外删除文件。在命令运行时,命令行会实时输出当前正在复制的源目录和状态。若发现方向反了,可按下 Ctrl+C 终止命令;
🌎关于编码
使用记事本的另存为