copy命令用法
Windows 官方文档:copy | Microsoft Learn
copy
命令用于将一个或多个文件从一个位置复制到另一个位置。
它的基本语法如下:
1 | COPY source destination |
source
: 指定要复制的文件路径。可以是单个文件的路径,也可以是通配符表达式指定多个文件。destination
: 指定复制文件的目标位置。可以是一个目录,也可以是一个包含文件名的目标路径。
以下是一些常见的 copy
命令选项和用法:
参数 | 说明 |
---|---|
/d | 允许将复制的加密文件作为解密文件保存到目标。 |
/v | 验证是否已正确写入新文件。 |
/n | 在复制名称超过八个字符或文件扩展名超过三个字符的文件时使用短文件名(如果可用)。 |
/y | 禁止提示你确认覆盖现有目标文件。 |
/-y | 提示你确认覆盖现有目标文件。 |
/z | 以可重启模式复制网络文件。 |
/a | 指示 ASCII 文本文件。 |
/b | 指示二进制文件。 |
<source> |
必需。 指定要从中复制一个文件或一组文件的位置。 source 可以由驱动器号后跟分号、目录名称、文件名或是这几项的组合组成。 |
<destination> |
必需。 指定要将一个文件或一组文件复制到的位置。 destination 可以由驱动器号后跟分号、目录名称、文件名或是这几项的组合组成。 |
/? | 在命令提示符下显示帮助。 |
跳过已经存在的文件
使用copy
命令并不能直接跳过已存在的文件
##xcopy命令用法
Windows 官方文档:xcopy | Microsoft Learn
复制文件和目录,包括子目录。
xcopy
命令是Windows系统中用于复制文件和目录的命令行工具,它比copy
命令更强大,并支持更多的选项。下面是xcopy
命令的基本用法和一些常用选项:
1 | xcopy [源文件/目录] [目标文件/目录] [/选项] |
-
[源文件/目录]
:要复制的文件或目录的路径。 -
[目标文件/目录]
:复制的文件或目录的目标路径。 -
/选项
:可选的命令选项,如/s
、/e
等。下面是一些常用的选项:/s
:复制目录及其子目录,但不包括空目录。/e
:复制目录及其子目录,包括空目录。/i
:如果目标是目录而不是文件,会提示是否创建目标目录。/y
:不提示是否覆盖现有目标文件。/d
:仅在源文件更新时才复制文件。
示例用法:
-
将一个文件复制到另一个目录:
1
xcopy C:\source\file.txt D:\destination\
-
将一个目录及其子目录中的所有文件复制到另一个目录:
1
xcopy C:\source\* D:\destination\ /s /i
-
将一个目录及其子目录中的所有文件和子目录复制到另一个目录:
1
xcopy C:\source\* D:\destination\ /e /i
请注意,xcopy
命令在复制文件时不会询问是否覆盖目标文件,除非使用了/y
选项。因此,请谨慎使用xcopy
命令以避免意外覆盖文件。
参数 | 说明 |
---|---|
必需。 指定要复制的文件的位置和名称。 此参数必须包括驱动器或路径。 | |
[ |
指定要复制的文件的目标。 此参数可以包括驱动器号后接冒号、目录名、文件名或这几项的组合。 |
/W | 在开始复制文件之前显示以下消息并等待你的响应:按任意键开始复制文件**** |
/p | 提示你确认是否要创建每个目标文件。 |
/c | 忽略错误。 |
/v | 在将每个文件写入目标文件时对其进行验证,以确保目标文件与源文件相同。 |
/q | 禁止显示 xcopy 消息。 |
/f | 复制时显示源文件名和目标文件名。 |
/l | 生成要复制的文件列表,但不主动复制文件。 |
/g | 当目标不支持加密时创建解密的目标文件。 |
/d [:MM-DD-YYYY] | 仅复制在指定的日期或之后更改的源文件。 如果不包含 MM-DD-YYYY 值,则 xcopy 会复制比现有目标文件更新的所有源文件。 此命令行选项可用于更新已更改的文件。 |
/u | 从仅存在于目标上的源复制文件****。 |
/i | 如果源是目录或包含通配符,并且目标不存在,则 xcopy 会假设目标指定了目录名,并会创建新目录。 然后,xcopy 将所有指定文件复制到新目录中。 默认情况下,xcopy 会提示你指定目标是文件还是目录**。 |
/s | 复制目录和子目录,除非它们是空的。 如果省略 /s,则 xcopy 在单个目录中运行****。 |
/e | 复制所有子目录,即使它们是空的。 将 /e 与 /s 和 /t 命令行选项结合使用************。 |
/t | 仅复制子目录结构(即树),而不复制文件。 若要复制空目录,必须包含 /e 命令行选项****。 |
/k | 复制文件,并保留目标文件的只读属性(如果存在于源文件上)****。 默认情况下,xcopy 会删除只读属性。 |
/r | 复制只读文件。 |
/h | 复制具有隐藏文件和系统文件属性的文件。 默认情况下,xcopy 不会复制隐藏文件或系统文件 |
/a | 仅复制设置了存档文件属性的源文件**。 /a 不会修改源文件的存档文件属性。 有关如何使用 attrib 设置存档文件属性的信息,请参阅相关链接****。 |
/m | 复制设置了存档文件属性的源文件**。 与 /a 不同,/m 会关闭源中指定的文件的存档文件属性********。 有关如何使用 attrib 设置存档文件属性的信息,请参阅相关链接****。 |
/n | 使用 NTFS 短文件名或目录名创建副本。 将文件或目录从 NTFS 卷复制到 FAT 卷,或者当目标上需要 FAT 文件系统命名约定(即 8.3 命名规则字符)时,/n 是必需的******。 目标文件系统可以是 FAT 或 NTFS。 |
/o | 复制文件所有权和自由访问控制列表 (DACL) 信息。 |
/x | 复制文件审核设置和系统访问控制列表 (SACL) 信息(隐含 /o)****。 |
/exclude:FileName1[+[FileName2]][+FileName3] | 指定文件列表。 必须至少指定一个文件。 每个文件将包含搜索字符串,每个字符串在文件中独占一行。 当任一字符串与要复制的文件的绝对路径的任一部分匹配时,将排除该文件的复制。 例如,指定字符串 obj 将排除目录 obj 下的所有文件,或扩展名为 .obj 的所有文件************。 |
/y | 禁止提示你确认覆盖现有目标文件。 |
/-y | 提示你确认覆盖现有目标文件。 |
/z | 以可重启模式通过网络复制。 |
/b | 复制符号链接,而不复制文件。 此参数是在 Windows Vista® 中引入的。 |
/j | 复制文件而不缓冲。 建议用于非常大的文件。 此参数是在 Windows Server 2008 R2 中添加的。 |
/compress | 在文件传输期间请求网络压缩(如果适用)。 |
/? | 在命令提示符下显示帮助。 |
/sparse | 支持在复制期间保留文件的稀疏状态。 |
跳过已经存在的文件
xcopy
命令本身没有直接提供一个选项来跳过目标文件夹中已经存在的文件。但是,你可以结合使用一些其他命令和技巧来实现这个目的。
robocopy命令用法
将文件数据从一个位置复制到另一个位置。
robocopy
命令是 Windows 中一个非常强大的文件复制工具,其语法如下:
1 | ROBOCOPY source destination [file [file]...] [options] |
source
: 指定要复制文件或文件夹的源路径。destination
: 指定复制目标的路径。file
: 可选参数,用于指定要复制的特定文件。如果未提供文件参数,则robocopy
将复制源路径中的所有文件。options
: 用于指定robocopy
的行为和选项的参数。
以下是一些常用的 robocopy
选项:
/S
: 复制所有子目录,但不包括空目录。/E
: 复制所有子目录,包括空目录。/Z
: 在网络故障发生时支持断点续传。/COPYALL
: 复制所有文件信息,包括安全权限、所有者信息等。/R:n
: 设置在错误情况下重试次数为 n 次。/W:n
: 设置在错误情况下重试等待时间为 n 秒。/XO
: 只复制比目标新或不存在的文件。/LOG:file
: 将复制过程的输出记录到指定的文件中。
以上只是 robocopy
命令的一些常见选项。你可以使用 robocopy /?
命令在命令行中查看完整的帮助文档,以了解更多选项和用法。
复制文件限制选项:
选项 | 说明 |
---|---|
/iomaxsize:<n> [kmg] |
每个读取/写入周期请求的最大 i/o 大小,以 n千字节、兆字节或千兆字节为单位。 |
/iorate:<n> [kmg] |
每秒请求的 i/o 速率,以 n千字节、兆字节或千兆字节为单位。 |
/threshold:<n> [kmg] |
限制的文件大小阈值,以 n千字节、兆字节或千兆字节为单位(请参阅备注)。 |
这些限制选项可用于指定 Robocopy 允许使用的最大 I/O 带宽(以“字节/秒”为单位)。 如果未以“字节/秒”为单位进行指定,则可在已指定 k、m 或 g 的情况下使用整数。 即使指定了较小值,受限的最小 I/O 带宽依然为 524288 字节。
文件选择选项:
选项 | 描述 |
---|---|
/a | 仅复制设置了 Archive 属性的文件。 |
/m | 仅复制设置了 Archive 属性的文件,并重置 Archive 属性。 |
/ia:[RASHCNETO] |
仅包括设置了任何指定属性的文件。 此选项的有效值为:R - 只读A - 存档S - 系统H - 隐藏C - 压缩N - 不为内容编制索引E - 加密T - 临时O - 脱机 |
/xa:[RASHCNETO] |
排除设置了任何指定属性的文件。 此选项的有效值为:R - 只读A - 存档S - 系统H - 隐藏C - 压缩N - 不为内容编制索引E - 加密T - 临时O - 脱机 |
/xf <filename>[ ...] |
排除与指定的名称或路径匹配的文件。 支持通配符(***** 和 ?)。 |
/xd <directory>[ ...] |
排除与指定的名称和路径匹配的目录。 |
/xc | 排除时间戳相同但文件大小不同的现有文件。 |
/xn | 从复制中排除比目标更新的源目录文件。 |
/xo | 从复制中排除比目标更旧的源目录文件。 |
/xx | 排除目标(而不是源)中存在的额外文件和目录。 排除额外的文件不会从目标中删除这些文件。 |
/xl | 排除源(而不是目标)中存在的“孤立”文件和目录。 排除孤立的文件可防止将任何新文件添加到目标。 |
/im | 包括已修改的文件(更改时间不同)。 |
/is | 包括相同的文件。 相同文件的名称、大小、时间和所有属性都相同。 |
/it | 包括“已调整”的文件。 已调整文件的名称、大小和时间相同,但属性不同。 |
/max:<n> |
指定最大文件大小(以排除大于 n 个字节的文件)。 |
/min:<n> |
指定最小文件大小(以排除小于 n 个字节的文件)。 |
/maxage:<n> |
指定最大文件期限(以排除超过 n 天或早于特定日期的文件)。 |
/minage:<n> |
指定最小文件期限(排除不到 n 天或晚于特定日期的文件)。 |
/maxlad:<n> |
指定最大上次访问日期(排除有 n 天/自 n 日期以来未使用的文件)。 |
/minlad:<n> |
指定最小上次访问日期(排除有 n 天/自 n 日期以来已使用的文件)。如果 n 小于 1900,则 n 指定天数。 否则,n 指定 YYYYMMDD 格式的日期。 |
/xj | 排除交接点(通常默认会包含)。 |
/fft | 采用 FAT 文件时间(精度为两秒)。 |
/dst | 补偿一小时 DST 时差。 |
/xjd | 排除目录的交接点。 |
/xjf | 排除文件的交接点。 |
重试选项:
选项 | 描述 |
---|---|
/r:<n> |
指定复制失败时的重试次数。 n 的默认值为 1,000,000(100 万次重试)。 |
/w:<n> |
指定等待重试的间隔时间,以秒为单位。 n 的默认值为 30(等待 30 秒)。 |
/reg | 将 /r 和 /w 选项中指定的值保存为注册表中的默认设置。 |
/tbd | 指定系统等待定义共享名称(重试错误 67)。 |
/lfsm | 在支持复制、暂停和恢复的低可用空间模式下运行(请参阅备注)。 |
/lfsm:<n> [kmg] |
指定下限值,以 n千字节、兆字节或千兆字节为单位。 |
日志记录选项:
选项 | 描述 |
---|---|
/l | 指定仅列出文件(而不复制、删除或设置时间戳)。 |
/x | 报告所有额外的文件,而不仅仅是已选择的文件。 |
/v | 生成详细输出,并显示所有已跳过的文件。 |
/ts | 在输出中包括源文件时间戳。 |
/fp | 在输出中包括文件的完整路径名称。 |
/bytes | 以字节为单位输出大小。 |
/ns | 指定不记录文件大小。 |
/nc | 指定不记录文件类。 |
/nfl | 指定不记录文件名。 |
/ndl | 指定不记录目录名称。 |
/np | 指定不显示复制操作的进度(到目前为止复制的文件或目录数)。 |
/eta | 显示复制的文件的估计到达时间 (ETA)。 |
/log:<logfile> |
将状态输出写入到日志文件(覆盖现有的日志文件)。 |
/log+:<logfile> |
将状态输出写入日志文件(将输出追加到现有日志文件)。 |
/unilog:<logfile> |
将状态输出作为 Unicode 文本写入日志文件(覆盖现有日志文件)。 |
/unilog+:<logfile> |
将状态输出作为 Unicode 文本写入日志文件(将输出追加到现有日志文件)。 |
/tee | 将状态输出写入控制台窗口和日志文件。 |
/njh | 指定没有作业标头。 |
/njs | 指定没有作业摘要。 |
/unicode | 将状态输出显示为 Unicode 文本。 |
作业选项:
选项 | 描述 |
---|---|
/job:<jobname> |
指定要从命名的作业文件派生参数。 若要运行 /job:jobname ,必须首先运行 /save:jobname 参数来创建作业文件。 |
/save:<jobname> |
指定要将参数保存到命名的作业文件。 此参数必须在运行 /job:jobname 之前运行。 必须在此参数之前指定所有复制、重试和日志记录选项。 |
/quit | 处理命令行后退出(以查看参数)。 |
/nosd | 指示未指定任何源目录。 |
/nodd | 指示未指定目标目录。 |
/if | 包括指定的文件。 |
robocopy 的 /purge /mir 解析
robocopy
是 Windows 操作系统中的一个高级文件复制实用程序,用于在目录之间复制文件和目录。robocopy
有很多选项来控制其行为,其中 /purge
和 /mir
是非常常用的两个选项。下面是对这两个选项的详细解析:
/mir
选项
/mir
是 /e
和 /purge
的组合选项。具体功能如下:
/e
: 复制所有子目录,包括空的子目录。/purge
: 删除目标目录中源目录不存在的文件和目录。
所以,使用 /mir
选项时,robocopy
会进行镜像复制,即它会使目标目录成为源目录的精确副本。这意味着它不仅会复制源目录中的所有文件和子目录(包括空的子目录),还会删除目标目录中那些在源目录中已经不存在的文件和目录。
/purge
选项
/purge
选项用于删除目标目录中源目录不存在的文件和目录。当你使用 /purge
选项时,robocopy
将会检查目标目录中的每一个文件和子目录,如果它们在源目录中不存在,它们将被删除。这个选项通常与其他复制选项一起使用,以确保目标目录与源目录保持同步。
举例说明
假设有如下两个目录:
-
源目录:
C:\Source
1
2
3
4
5C:\Source
├── File1.txt
├── File2.txt
└── SubDir
└── File3.txt -
目标目录:
D:\Destination
1
2
3
4
5
6D:\Destination
├── File1.txt
├── File4.txt
└── SubDir
└── File3.txt
└── File5.txt
执行以下命令:
1 | robocopy C:\Source D:\Destination /mir |
运行结果:
File1.txt
会被复制,因为它存在于源目录中。File2.txt
会被复制,因为它存在于源目录中。File4.txt
会被删除,因为它在目标目录中存在但在源目录中不存在。File3.txt
会被保留,因为它在两个目录中都存在。File5.txt
会被删除,因为它在目标目录中存在但在源目录中不存在。
最终,目标目录 D:\Destination
会变成:
1 | D:\Destination |
小结
/mir
:确保目标目录是源目录的精确副本,包括复制所有文件和子目录(包括空的子目录)并删除源目录中不存在的文件和子目录。/purge
:删除目标目录中源目录不存在的文件和目录。
这两个选项通常用于确保两个目录完全同步,是维护备份或镜像文件夹的强大工具。