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]

参数

参数 说明
<数据源> 必需。 指定要复制的文件的位置和名称。 此参数必须包含驱动器或路径。
[ < 目标 > ] 指定要复制的文件的目标。 此参数可以包含驱动器号和冒号、目录名称、文件名或它们的组合。
/W 显示以下消息并等待响应,然后开始复制文件:按任意键开始复制 (

/p 提示你确认是否要创建每个目标文件。
/c 忽略错误。
/v 在写入目标文件时验证每个文件,以确保目标文件与源文件相同。
/q 禁止显示 xcopy 消息。
/f 在复制时显示源和目标文件名。
/l 显示要复制的文件的列表。
/g 当目标不支持 加密 时,创建解密的目标文件。
/d [:MM-DD-YYYY] 仅复制指定日期或之后更改的源文件。 如果不包含MM-DD-YYYY,xcopy将复制比现有目标文件更新的所有源文件。 此命令行选项允许更新已更改的文件。
/U 仅从"目标 " 上存在的"源 "复制 文件。
/i 如果 Source 是目录或包含通配符且 Destination 不存在,则 xcopy 假定 Destination 指定目录名称并创建新目录。 然后 ,xcopy 将所有指定的文件复制到新目录中。 默认情况下 ,xcopy 会提示你指定 Destination 是文件还是目录。
/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 复制符号链接而不是文件。 此参数是在 Vista Windows中引入®。
/j 在不缓冲的情况下复制文件。 建议用于非常大的文件。 此参数已添加到 Windows Server 2008 R2 中。
/? 在命令提示符下显示帮助。

备注

  • 使用 /z

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

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

    可以在 COPYCMD 环境变量中使用/y。 可以通过在命令行上使用 /-y 来替代此命令。 默认情况下,系统会提示你进行覆盖。

  • 复制加密文件

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

  • 追加文件

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

  • Destination 的 默认值

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

  • 指定 Destination 是文件或目录

    如果 Destination 不包含现有目录,并且没有以反杠 () 结尾,则会出现以下消息:

    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 的退出代码

    若要处理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. 若要使用自 1993 年 12 月 29 日起已更改的 \Rawdata 目录中的文件更新 \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:

命令解释器将C:\Prgmcode替换为%1,将 B:替换为%2,然后将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

其他参考