Robocopy实战文件备份

Robocopy实战文件备份

robocopy | Microsoft Docs

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 终止命令;

🌎关于编码

使用记事本的另存为功能,可以选择为 ANSI 编码;

使用专业编辑器如 VS Code, Sublime Text 等,则设置为 GBK 编码(不是 GB2312),或 GB18030 编码。

若自己编写命令生成软件,则生成的批处理必须使用 GBK。

如在 Python 内通过向 open() 函数传递 encoding="gbk" 来指名编码。

with open('自动生成.bat', 'w', encoding='gbk') as f:
    f.write('robocopy命令字符串')

若在 C# 内,使用如下代码:

using System.Text;

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
string finalCmd = "robocopy命令字符串";
System.IO.File.WriteAllText("自动生成.bat", finalCmd, Encoding.GetEncoding("GBK"));

🗡️数据同步实战

文件夹单向同步

例如,把 D:\test 镜像同步到 E:\test 下,这将保证 E:\test 与 D:\test 完全一致,来自 D 的文件将覆盖 E 的文件,E 中多余的文件将被删除,适用于文件夹的单向同步。

robocopy "D:\test" "E:\test" /MIR /MT:1

文件夹同步到冷备份硬盘

D:\test 镜像同步到 E:\test 下。

robocopy "D:\test" "E:\test" /MIR /MT:1

文件夹普通复制备份

D:\test 普通同步到 E:\test 下,不删除不同的文件,等价于复制时选择替换重名文件 。

robocopy "D:\test" "E:\test" /S /MT:1

不复制文件的属性

D:\test 镜像同步到 E:\test 下,使用 /COPY:DT 不保留文件的属性,适用于不使用管理员身份运行。

robocopy "D:\test" "E:\test" /MIR /COPY:DT /MT:1

使用以上命令时,可能遇到文件属性无法找到文件的问题,使用管理员身份运行即可解决

所有选项

选项说明
/s复制子目录。 此选项自动排除空目录。
/e复制子目录。 此选项自动包括空目录。
/lev:<n>仅复制源目录树的前 n 个级别。
/z以可重启模式复制文件。 在可重启模式下,如果文件副本中断,Robocopy 可以选取它离开的位置,而不是重新复制整个文件。
/b在备份模式下复制文件。 备份模式允许 Robocopy (ACL) 替代文件和文件夹权限设置。 这样,就可以复制你可能无权访问的文件,前提是该文件在具有足够权限的帐户下运行。
/zb以可重启模式复制文件。 如果文件访问被拒绝,请切换到备份模式。
/j使用建议用于大型文件) 使用无缓冲区 I/O (的副本。
/efsraw复制 EFS RAW 模式下的所有加密文件。
/copy:<copyflags>指定要复制的文件属性。 此选项的有效值为:D - 数据A - 属性T - 时间戳S - NTFS 访问控制列表 (ACL)O - 所有者信息U - 审核信息此选项的默认值为 DAT (数据、属性和时间戳) 。
/dcopy:<copyflags>指定要在目录中复制的内容。 此选项的有效值为:D - 数据A - 属性T - 时间戳此选项的默认值为 DA (数据和属性) 。
/秒复制安全 (等效 于 /copy:DATS) 的文件。
/copyall复制与 /copy:DATSOU) 等效的所有文件信息 (。
/nocopy复制任何文件信息, (/purge) 很有用。
/secfix修复了所有文件的文件安全性,甚至跳过了这些文件。
/timfix修复了所有文件的文件时间,甚至跳过了这些文件。
/purge删除源中不再存在的目标文件和目录。 将此选项与 /e 选项和目标目录结合使用,允许不覆盖目标目录安全设置。
/mir镜像与 /e/purge) 等效的目录树 (。 将此选项与 /e 选项和目标目录结合使用,覆盖目标目录安全设置。
/mov移动文件,并在复制文件后从源中删除这些文件。
/move移动文件和目录,并在复制这些文件和目录后从源中删除它们。
/a+:[RASHCNET]将指定的属性添加到复制的文件。 此选项的有效值为:R - 只读A - 存档S - 系统H - 隐藏C - 压缩N - 未编制索引的内容E - 加密T - 临时
/a-:[RASHCNET]从复制的文件中删除指定的属性。 此选项的有效值为:R - 只读A - 存档S - 系统H - 隐藏C - 压缩N - 未编制索引的内容E - 加密T - 临时
/create仅创建目录树和零长度文件。
/fat仅使用 8.3 个字符长度的 FAT 文件名创建目标文件。
/256关闭对超过 256 个字符的路径的支持。
/mon:<n>监视源,并在检测到超过 n 个 更改时再次运行。
/mot:<m>监视源,并在检测到更改时以 m 分钟为单位再次运行。
/mt[:n]使用 n 个线程创建多线程副本。 n 必须是介于 1 和 128 之间的整数。 n 的默认值为 8。 为了提高性能,请使用 /log 选项重定向输出。/mt 参数不能与 /ipg/efsraw 参数一起使用。
/rh:hhmm-hhmm指定可以启动新副本的运行时间。
/pf检查每个文件的运行时间, (不按传递) 。
/ipg:n指定数据包间差距,以在慢速线路上释放带宽。
/sj将连接 (软链接) 复制到目标路径而不是链接目标。
/sl不要关注符号链接,而是创建链接的副本。
/nodcopy(默认 /dcopy:DA) 不复制任何目录信息。
/nooffload在不使用 Windows 复制卸载机制的情况下复制文件。
/compress请求文件传输期间的网络压缩(如果适用)。

退出 (返回) 代码

Value说明
0未复制任何文件。 未遇到任何失败。 没有不匹配的文件。 目标目录中已存在这些文件;因此,跳过了复制操作。
1已成功复制所有文件。
2目标目录中存在一些其他文件,这些文件不在源目录中。 未复制任何文件。
3复制了一些文件。 存在其他文件。 未遇到任何失败。
5复制了一些文件。 某些文件不匹配。 未遇到任何失败。
6存在其他文件和不匹配的文件。 未复制任何文件,也不会遇到任何故障。 这意味着文件已存在于目标目录中。
7文件已复制,存在文件不匹配,并且存在其他文件。
8多个文件未复制。

附:自动管理员身份运行

将以下命令复制到一个 bat 文件中,双击即可管理员身份运行。注意用 ANSI 或者 GBK 编码批处理文件。

:: ============固定模板1开始============
@ECHO OFF
setlocal EnableDelayedExpansion
PUSHD %~DP0 & cd /d "%~dp0"
%1 %2
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :target","","runas",1)(window.close)&goto :eof
:target
:: ============固定模板1结束============
:: 以下批处理将自动按管理员权限执行

:: 在这里按行写 robocopy 命令
:: 当然其他命令也是可以的
robocopy "F:\转移文件\to" "F:\转移文件\from" /MIR /MT:1
robocopy "F:\转移文件\to1" "F:\转移文件\from1" /MIR /MT:1
echo 所有目录均完成同步

:: ============固定模板2开始============
pause > nul
exit
:: ============固定模板2结束============
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值