xcopy

复制文件和目录,包括子目录。

有关如何使用此命令的示例,请参阅示例

语法

xcopy <Source> [<Destination>] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d [:MM-DD-YYYY]] [/u] [/i] [/s [/e]] [/t] [/k] [/r] [/h] [{/a | /m}] [/n] [/o] [/x] [/exclude:FileName1[+[FileName2]][+[FileName3]]] [{/y | /-y}] [/z] [/b] [/j] [/compress]

参数设置

参数 说明
<Source> 必需。 指定要复制的文件的位置和名称。 此参数必须包括驱动器或路径。
[<Destination>] 指定要复制的文件的目标。 此参数可以包括驱动器号后接冒号、目录名、文件名或这几项的组合。
/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 启用或禁用在复制过程期间保留文件的稀疏状态。 如果同时指定了这两个参数,则 /-sparse 将覆盖 /sparse
/noclone 不会尝试将区块克隆作为一种优化。
/? 在命令提示符下显示帮助。

备注

  • 使用 /z

    如果在复制阶段断开连接(例如,如果服务器脱机,则会断开连接),在重新建立连接后,复制将会恢复。 /z 还显示针对每个文件执行的复制操作的完成百分比

  • 在 COPYCMD 环境变量中使用 /y

    可以在 COPYCMD 环境变量中使用 /y。 可以在命令行中使用 /-y 来替代此命令。 默认会提示你是否要覆盖。

  • 复制加密的文件

    将加密的文件复制到不支持 EFS 的卷会导致错误。 首先解密文件,或者将文件复制到支持 EFS 的卷。

  • 追加文件

    若要追加文件,请为目标指定单个文件,但为源指定多个文件(即,使用通配符或 file1+file2+file3 格式)。

  • 目标的默认值

    如果省略目标,xcopy 命令会将文件复制到当前目录

  • 指定目标是文件还是目录

    如果目标不包含现有目录且不以反斜杠 (\) 结尾,则会显示以下消息:

    Does <Destination> specify a file name or directory name on the target(F = file, D = directory)?
    

    如果你想要将一个或多个文件复制到某个文件,请按 F。 如果你想要将一个或多个文件复制到某个目录,请按 D。

    可以使用 /i 命令行选项禁止此消息,这样,如果源是多个文件或目录,则 xcopy 假设目标是目录

  • 使用 xcopy 命令设置目标文件的存档属性

    xcopy 命令创建设置了存档属性的文件,无论该属性是否已在源文件中设置。 有关文件属性和 attrib 的详细信息,请参阅相关链接

  • 比较 xcopydiskcopy

    如果磁盘包含子目录中的文件,而你想将其复制到格式不同的磁盘上,请使用 xcopy 命令而不是 diskcopy。 由于 diskcopy 命令会逐轨复制磁盘,因此源磁盘和目标磁盘必须具有相同的格式。 xcopy 命令没有这一要求。 除非需要复制完整磁盘映像,否则请使用 xcopy

  • 内存不足错误

    如果运行 xcopy 复制文件名路径大于 255 个字符的文件或文件夹,则可能会出现“内存不足”错误。

  • xcopy 的退出代码

    若要处理 xcopy 返回的退出代码,请在批处理程序的 if 命令行中使用 ErrorLevel 参数。 有关使用 if 处理退出代码的批处理程序示例,请参阅相关链接。 下表列出了每个退出代码和描述。

    退出代码 说明
    0 文件已复制且未出错。
    1 找不到要复制的文件。
    2 用户已按下 CTRL+C 终止了 xcopy
    4 发生了初始化错误。 内存或磁盘空间不足,或者在命令行中输入了无效的驱动器名称或无效的语法。
    5 发生了磁盘写入错误。

示例

1. 若要将驱动器 A 中的所有文件和子目录(包括所有空子目录)复制到驱动器 B,请键入

xcopy a: b: /s /e

2. 若要在以上示例中包括所有系统文件或隐藏文件,请添加 /h 命令行选项,如下所示

xcopy a: b: /s /e /h

3. 若要使用 \Rawdata 目录中自 1993 年 12 月 29 日以来更改的文件更新 \Reports 目录中的文件,请键入

xcopy \rawdata \reports /d:12-29-1993

4. 若要更新以上示例中 \Reports 中的所有文件(不考虑日期),请键入

xcopy \rawdata \reports /u

5. 若要获取以上命令复制的文件的列表(即,不实际复制文件),请键入

xcopy \rawdata \reports /d:12-29-1993 /l > xcopy.out

文件 xcopy.out 列出了要复制的每个文件。

6. 若要将 \Customer 目录及其所有子目录复制到网络驱动器 H: 上的目录 \\Public\Address,保留只读属性,并在 H: 上创建新文件时得到提示,请键入

xcopy \customer h:\public\address /s /e /k /p

7. 要发出上一条命令,请确保 xcopy 在不存在 \Address 目录的情况下创建该目录,并禁止显示创建新目录时显示的消息,请添加 /i 命令行选项,如下所示:

xcopy \customer h:\public\address /s /e /k /p /i

8. 可以创建一个批处理程序来执行 xcopy 操作,并在发生错误时使用批处理 if 命令处理退出代码。 例如,以下批处理程序对 xcopy 源参数和目标参数使用可替换参数:

@echo off
rem COPYIT.BAT transfers all files in all subdirectories of
rem the source drive or directory (%1) to the destination
rem drive or directory (%2)
xcopy %1 %2 /s /e
if errorlevel 4 goto lowmemory
if errorlevel 2 goto abort
if errorlevel 0 goto exit
:lowmemory
echo Insufficient memory to copy files or
echo invalid drive or command-line syntax.
goto exit
:abort
echo You pressed CTRL+C to end the copy operation.
goto exit
:exit

若要使用上述批处理程序将 C:\Prgmcode 目录及其子目录中的所有文件复制到驱动器 B,请键入:

copyit c:\prgmcode b:

命令解释器将 %1 替换为 C:\Prgmcode,将 %2 替换为 B:,然后将 xcopy 与 /e 和 /s 命令行选项结合使用。 如果 xcopy 遇到错误,该批处理程序会读取退出代码并转到相应 IF ERRORLEVEL 语句中指示的标签,然后显示相应的消息并从批处理程序退出

9. 此示例复制所有非空目录,以及在星号后带有关联文件扩展名的文件

xcopy .\toc*.yml ..\..\Copy-To\ /S /Y

rem Output example.
rem  .\d1\toc.yml
rem  .\d1\d12\toc.yml
rem  .\d2\toc.yml
rem  3 File(s) copied

在以上示例中,此特定源参数值 .\toc*.yml 复制相同的 3 个文件,即使删除此参数的两个路径字符 .\。 但是,如果从源参数中删除星号通配符(使之成为 .\toc.yml),则不会复制任何文件