robocopy和copy的区别
robocopy 和 copy 做一个详细对比,尤其是在 Windows 环境下,适合你这种往公盘复制文件的场景。
1️⃣ copy 命令
语法:
bat
copy [源文件] [目标路径] [/Y]
特点:
-
简单:主要用于复制单个文件或少量文件。
-
覆盖确认 :
/Y可以自动覆盖目标文件,否则会提示确认。 -
局限性:
- 网络中断或文件占用时容易失败。
- 不能递归目录(需要配合
xcopy)。 - 对大文件或公盘共享路径不稳定。
-
输出信息简单:只显示复制的文件和总数。
使用场景:
- 本地复制单个文件或小文件夹
- 临时脚本,不在乎网络或文件被占用
2️⃣ robocopy 命令(Robust File Copy)
语法:
bat
robocopy <源目录> <目标目录> [文件名或通配符] [选项]
特点:
- 可靠性强:专门为网络共享、远程驱动器设计。
- 可恢复模式 :
/Z可以在网络中断时继续传输。 - 支持递归复制:可以直接复制整个文件夹,包括子目录。
- 失败重试 :
/R:n /W:n可以指定重试次数和等待时间,非常适合公盘或被占用文件。 - 日志可控 :
/NFL /NDL /NP可以控制输出,适合在 Jenkins 或自动化中使用。 - 适合大文件 :比
copy更稳定,不容易出错。
使用场景:
- 网络共享、公盘或大文件复制
- 自动化脚本、CI/CD 流程中保证文件复制稳定
- 遇到文件被占用、网络短暂中断也能继续
3️⃣ 核心区别总结
| 特性 | copy | robocopy |
|---|---|---|
| 可靠性 | 低 | 高,支持网络断开继续 |
| 支持目录 | 否(单文件或少量文件) | 是,支持递归 |
| 大文件 | 不稳定 | 稳定 |
| 网络路径 | 易失败 | 优化,适合公盘/共享目录 |
| 重试机制 | 无 | 有 /R:n /W:n |
| 输出控制 | 简单 | 可精细控制 /NFL /NDL /NP |
| 自动化 | 较弱 | 强,非常适合 Jenkins 或批处理脚本 |
✅ 结论:
- 你这种"往公盘复制多个文件,可能被占用,可能网络不稳定"的场景,
robocopy更适合。 copy只适合简单、本地、快速的小文件复制。
解释一下robocopy命令的参数
bat
robocopy "." "${public_Path}" "%%F" /Z /R:10 /W:5 /NFL /NDL /NP
1️⃣ 基本结构
-
robocopy <源路径> <目标路径> <文件名或通配符> [选项] -
在你这里:
"."→ 当前目录(源目录)"${folderPath}"→ 目标目录(公盘路径)"%%F"→ 循环里当前要复制的文件名
2️⃣ 参数含义
| 参数 | 意义 | 作用说明 |
|---|---|---|
/Z |
可中断模式(Restartable Mode) | 如果网络中断,复制会暂停并在恢复后继续,不会重新从头复制整个文件,适合公盘或大文件复制。 |
/R:10 |
重试次数(Retry) | 如果文件被占用或复制失败,会重试 10 次,默认是 1,000,000 次。 |
/W:5 |
重试等待(Wait) | 每次重试之间等待 5 秒(配合 /R 使用)。 |
/NFL |
No File List | 不显示每个复制的文件名列表,减少日志输出。 |
/NDL |
No Directory List | 不显示目录列表,只显示必要信息。 |
/NP |
No Progress | 不显示复制进度百分比,避免日志太长。 |
3️⃣ 实战效果
- 当你复制到公盘时,即使网络短暂掉线,
/Z会保证文件继续传输 R+W确保遇到占用文件时不会直接失败/NFL /NDL /NP让控制台输出干净,不会因为大量文件占满日志
4️⃣ 可选强化
如果你希望完全静默且只报错 ,可以加 /NJH /NJS:
/NJH→ No Job Header,去掉开始任务信息/NJS→ No Job Summary,去掉结束汇总信息
完整命令示例:
bat
robocopy "." "${folderPath}" "%%F" /Z /R:10 /W:5 /NFL /NDL /NP /NJH /NJS
这样控制台只会显示 文件不存在 或 复制失败 的警告,干净又稳定。