Windows系统copy和xcopy命令
复制文件
copy复制一份或多份文件
xcopy复制文件和目录树
一、copy语法
copy [/d] [/v] [/n] [/y | /-y] [/z] [/a | /b] <source> [/a | /b] [+<source> [/a | /b] [+ ...]] [<destination> [/a | /b]]
参数
参数 | 说明 |
---|---|
/d | 允许将复制的加密文件作为解密文件保存到目标。 |
/v | 验证是否已正确写入新文件。 |
/n | 在复制名称超过八个字符或文件扩展名超过三个字符的文件时使用短文件名(如果可用)。 |
/y | 禁止提示你确认覆盖现有目标文件。 |
/-y | 提示你确认覆盖现有目标文件。 |
/z | 以可重启模式复制网络文件。 |
/a | 指示 ASCII 文本文件。 |
/b | 指示二进制文件。 |
<source> |
必需。 指定要从中复制一个文件或一组文件的位置。 source 可以由驱动器号后跟分号、目录名称、文件名或是这几项的组合组成。 |
<destination> |
必需。 指定要将一个文件或一组文件复制到的位置。 destination 可以由驱动器号后跟分号、目录名称、文件名或是这几项的组合组成。 |
/? | 在命令提示符下显示帮助。 |
注解
-
可以复制使用文件结束字符 (CTRL+Z) 指示文件结束的 ASCII 文本文件。
-
如果在命令行中的文件列表前面或后面添加 /a,该选项将应用于列出的所有文件,直到 copy 遇到 /b。 在这种情况下,/b 应用 /b 前面的文件。
/a 的效果取决于它在命令行字符串中的位置:- 如果 /a 跟在 source 后面,则 copy 命令会将文件视为 ASCII 文件并复制第一个文件结束字符 (CTRL+Z) 前面的数据。 - 如果 /a 跟在 destination 后面,则 copy 命令会添加一个文件结束符 (CTRL+Z) 作为文件的最后一个字符。
-
如果 /b 指示命令解释器读取目录中文件大小指定的字节数。 除非 copy 合并文件,否则 /b 是 copy 的默认值。
-
如果在命令行中的文件列表前面或后面添加 /b,该选项将应用于列出的所有文件,直到 copy 遇到 /a。 在这种情况下,/a 应用 /a 前面的文件。
/b 的效果取决于它在命令行字符串中的位置:- 如果 /b 跟在 source 后面,则 copy 命令会复制整个文件,包括任何文件结束字符 (CTRL+Z)。 - 如果 /b 跟在 destination 后面,则 copy 命令不会添加文件结束字符 (CTRL+Z)。
-
如果无法验证写入操作,将显示错误消息。 可以使用 /v 来验证是否已正确记录关键数据,不过,copy 命令很少发生记录错误。 /v 命令行选项还会减慢 copy 命令的速度,因为使用此选项时,必须检查磁盘上记录的每个扇区。
-
如果在 COPYCMD 环境变量中预设了 /y,你可以在命令行中使用 /-y 替代此设置。 默认情况下,除非在批处理脚本中执行 copy 命令,否则在替换此设置时会出现提示。
-
若要追加文件,请为 destination 指定一个文件,但为 source 指定多个文件(使用通配符或 file1+file2+file3 格式)。
-
如果在复制阶段断开连接(例如,如果服务器脱机,则会断开连接),可以在重新建立连接后使用 copy /z 予以恢复。 /z 选项还会显示针对每个文件的复制操作的完成百分比。
-
可以将出现的一个或多个 source 或 destination 替换为设备名称。
-
如果 destination 是设备(例如 Com1 或 Lpt1),则 /b 选项以二进制模式将数据复制到设备。 在二进制模式下,copy /b 会将所有字符(包括 CTRL+C、CTRL+S、CTRL+Z 和 ENTER 等特殊字符)作为数据复制到设备。 但是,如果省略 /b,则会在 ASCII 模式下将数据复制到设备。 在 ASCII 模式下,特殊字符可能会导致文件在复制过程中合并。
-
如果未指定目标文件,则会创建名称、修改日期和修改时间与原始文件相同的副本。 新副本存储在当前驱动器上的当前目录中。 如果源文件位于当前驱动器和当前目录中,并且你未为目标文件指定不同的驱动器或目录,则 copy 命令会停止并显示以下错误消息:
File cannot be copied onto itself 0 File(s) copied
-
如果在 source 中指定了多个文件,则 copy 命令会使用在 destination 中指定的文件名将这些文件全部合并到单个文件。 除非使用 /b 选项,否则 copy 命令假设合并的文件是 ASCII 文件。
-
若要复制长度为 0 字节的文件,或要复制某个目录的所有文件和子目录,请使用 xcopy 命令。
-
若要在不修改文件的情况下将当前时间和日期分配到文件,请使用以下语法:
copy /b <source> +,,
其中,逗号指示有意省略了 destination 参数。
示例
若要将名为 memo.doc 的文件复制到当前驱动器中的 letter.doc,并确保文件结束字符 (CTRL+Z) 位于复制的文件的末尾,请键入:
copy memo.doc letter.doc /a
若要将名为 robin.typ 的文件从当前驱动器和目录复制到驱动器 C 上名为 Birds 的现有目录,请键入:
copy robin.typ c:\birds
备注
如果 Birds 目录不存在,则会将文件 robin.typ 复制到名为 Birds 的文件中,该文件位于磁盘驱动器 C 上的根目录中。
若要合并当前目录中的 Mar89.rpt、Apr89.rpt 和 May89.rpt,并将其放入名为 Report 的文件(也在当前目录中),请键入:
copy mar89.rpt + apr89.rpt + may89.rpt Report
备注
如果合并文件,copy 命令会使用当前日期和时间标记目标文件。 如果省略 destination,将使用列表中第一个文件的名称合并和存储文件。
若要合并 Report 中的所有文件,当名为 Report 的文件已存在时,请键入:
copy report + mar89.rpt + apr89.rpt + may89.rpt
若要将当前目录中所有文件扩展名为 .txt 的文件合并到名为 Combined.doc 的单个文件,请键入:
copy *.txt Combined.doc
若要使用通配符将多个二进制文件合并为一个文件,请包含 /b。 这可以防止 Windows 将 CTRL+Z 视为文件结束字符。 例如,键入:
copy /b *.exe Combined.exe
注意
如果合并二进制文件,生成的文件可能因内部格式问题而无法使用。
- 将扩展名为 .txt 的每个文件与其相应 .ref 文件合并会创建文件名相同,但扩展名为 .doc 的文件。 Copy 命令将 file1.txt 与 file1.ref 合并成 file1.doc,然后该命令将 file2.txt 与 file2.ref 合并成 file2.doc,依此类推。 例如,键入:
copy *.txt + *.ref *.doc
若要合并扩展名为 .txt 的所有文件,然后将扩展名为 .ref 的所有文件合并为一个名为 Combined.doc 的文件,请键入:
copy *.txt + *.ref Combined.doc
二、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]
参数
参数 | 说明 |
---|---|
<数据源> | 必需。 指定要复制的文件的位置和名称。 此参数必须包括驱动器或路径。 |
[<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 是必需的。 destinatio* 文件系统可以是 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 | 在文件传输期间请求网络压缩(如果适用)。 |
/? | 在命令提示符下显示帮助。 |
注解
-
使用 /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 的详细信息,请参阅相关链接。 -
xcopy 和 diskcopy 的比较
**``**
如果磁盘在子目录中包含文件,而你想要将此磁盘复制到使用不同格式的磁盘,请使用
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. 若要使用 \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),则不会复制任何文件。