批处理之copy与xcopy拷贝文件详解

1. copy命令

1.1. 基本用法

  • 复制,将一个或多个文件从一个位置复制到其他位置。
  • 语法

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 可以由驱动器号和冒号、文件夹名、文件名及这几者的组合所组成。
    /? 在命令提示符显示帮助。
  • 注释

1.2. 注意

  • 可以复制那些使用文件结束字符 (CTRL+Z) 以表明文件结束的 ASCII 文本文件。
  • 使用 /a
    当在命令行的文件列表之前有 /a 时,它适用于所有已列出的文件,直到 copy 遇到 /b。在这种情况下,/b 应用于文件前面的 /b。
    当 /a 在命令行上紧跟在文件列表之后时,它适用于所有已列出的文件,直到 copy 遇到 /b。在这种情况下,/b 应用于文件前面的 /b。
    /a 参数的作用取决于它在命令行字符串中的位置。当 /a 紧随 Source 之后时,copy 会将文件当作 ASCII(文本)文件,并复制第一个文件结束符前的数据。
    当 /a 紧随 Destination 之后时,copy 会添加文件结束符作为文件的最后一个字符。
  • 使用 /b
    /b 指定命令解释器读取目录中由文件大小指定的字节数。/b 是 copy 的默认值,除非 copy 用于合并文件。
    当 /b 在命令行上位于文件列表之前时,它适用于所有已列出的文件,直到 copy 遇到 /a。在这种情况下,/a 应用于文件前面的 /a。
    当 /b 在命令行上位于文件列表之后时,它适用于所有已列出的文件,直到 copy 遇到 /a。在这种情况下,/a 应用于文件前面的 /a。
    /b 的作用取决于它在命令行字符串中的位置。当 /b 紧随 Source 之后时,copy 复制包含任何文件结束符的整个文件。
    当 /b 紧随 Destination 之后时,copy 不会添加文件结束符。
  • 使用 /v
    如果写入操作不能校验,则会出现错误消息。尽管使用 copy 很少发生记录错误,但是仍可以使用 /v 来确保重要的数据已正确记录。因为要检查驱动器上记录的每一个扇区,所以该 /v 命令行选项也会使 copy 命令的运行速度减慢。
  • 使用 /y 和 /-y
    如果在 COPYCMD 环境变量中预先设置了 /y,可以通过在命令行使用 /-y 来替换该设置。默认情况下,在替换该设置时会提示您,除非该 copy 命令在批处理脚本中执行。
  • 附属文件
    要附加文件,请为 Destination 指定单个文件,但要为 Source 指定多个文件(使用通配符或 文件 1+文件 2+文件 3 的格式)。
  • 使用 /z
    如果在复制阶段连接丢失(例如,如果服务器脱机切断了连接),copy /z 将在重新建立连接后继续复制。/z 同时会显示每个文件已完成的复制操作的百分比。
  • 复制到设备以及从设备复制
    可以用设备名替换一次或多次出现的 source 或 destination。
    在复制到设备时使用或省略 /b
    当 destination 是设备时(例如,Com1 或 Lpt1),/b 将以二进制模式将数据复制到该设备。在二进制模式下,copy /b 会将所有字符(包括特殊字符,例如, CTRL+C、CTRL+S、CTRL+Z 以及换行符等)作为数据复制到设备。但是,如果省略了 /b,则将以 ASCII 模式将数据复制到设备。在 ASCII 模式下,特殊字符可能导致 Windows XP 在复制过程中合并文件。有关详细信息,请参阅“合并文件”。
  • 使用默认目标文件
    如果不指定目标文件,将使用与源文件相同的名称、创建日期、创建时间来创建副本,并将新副本置于当前驱动器的当前目录中。如果源文件位于当前驱动器的当前目录中,而您没有为目标文件指定其他驱动器或目录,则 copy 命令将终止并显示下列错误消息:
    File cannot be copied onto itself
    0 File(s) copied
  • 合并文件
    如果指定了使用加号 (+) 分隔的多个 source,copy 会将这些文件合并在单个文件之中。如果在 source 中使用了通配符(* 或 ?),但在 destination 中指定了单个文件名,则 copy 会将所有与 source 中的文件名匹配的文件合并,并使用在 destination 中指定的文件名来创建单个文件。除非使用了 /b 命令行选项,否则在任一种情形中,copy 都会假定合并的文件是 ASCII 文件。
  • 复制零长度文件
    Copy 不会复制 0 字节长度的文件。使用 xcopy 复制这些文件。
  • 更改文件的时间和日期
    如果要将当前的时间和日期指派给文件而不修改文件,请使用以下语法:
    copy /b Source+,
    逗号表明省略了 Destination 参数。
  • 在子目录中复制文件
    要复制目录中的所有的文件和子目录,应该使用 xcopy 命令。
    故障恢复控制台提供了带有不同参数的 copy 命令。

1.3. 示例

  • 简单拷贝
	rem 如果文件夹不存在,则文件夹名abc直接当文件名
	copy a.txt d:\abc
	rem 按2进制拷贝,避免可能换行符文件终止符的转换
	copy /b a.txt b.txt
  • 合并文件
	rem 合并当前目录下所有指定类型的文件到指定文件中
	copy *.txt merge.txt
	rem 通过+来合并指定文件
	copy a.txt+b.txt c.txt
	rem 组合使用通配符*和+,将多种类型文件合并成一个
	copy *.txt+*.ini abc.txt
	rem 合并相同名字的不同类型文件为相应名字文件
	copy *.txt+*.ini *.text

2. xcopy命令

2.1. 基本用法

  • 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:file1[+[file2]][+[file3]] [{/y|/-y}] [/z]

  • 参数
    Source 必需的。指定要复制的文件的位置和名称。该参数必须包含驱动器或路径。
    Destination 指定要复制的文件的目标。该参数可以包含驱动器盘符和冒号、目录名、文件名或者它们的组合。
    /w 在开始复制文件之前将显示以下消息并等待您的响应:
    Press any key to begin copying file(s)
    /p 提示您确认是否要创建每个目标文件。
    /c 忽略错误。
    /v 在写入目标文件时验证每个文件,以确保目标文件与源文件完全相同。
    /q 禁止显示 xcopy 消息。
    /f 复制时显示源文件名和目标文件名。
    /l 显示要复制的文件列表。
    /g 创建解密的目标文件。
    /d[:mm-dd-yyyy] 只复制那些在指定日期或指定日期之后更改过的源文件。如果不包括 mm-dd-yyyy 值,xcopy 会复制比现有 Destination 文件新的所有 Source 文件。该命令行选项使您可以更新更改过的文件。
    /u 只从 source 复制 destination 中已有的文件。
    /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]] 指定包含字符串的文件列表。
    /y 禁止提示您确认要覆盖现存的目标文件。
    /-y 提示您确认要覆盖现有目标文件。
    /z 在可重启模式中通过网络复制。
    /? 在命令提示符显示帮助。

2.2. 注意

  • 使用 /exclude
    列出每个文件的单独行中的每个字符串。如果列出的任何字符串与要复制的文件的绝对路径的任何部分匹配,就从复制进程排除该文件。例如,如果指定字符串 “\Obj”,则会排除 Obj 目录下的所有文件。如果指定字符串 “.obj”,则排除具有 .obj 扩展名的所有文件。

  • 使用 /z
    如果在复制过程中丢失连接(例如,如果用于连接的服务器脱机),复制过程将在重新建立连接后恢复。/z 也显示每个文件完成的复制操作的百分比。

  • 在 COPYCMD 环境变量中使用 /y
    可在 COPYCMD 环境变量中使用 /y。在命令行上使用 /-y 可以覆盖该命令。默认情况下,会提示您覆盖,除非您从批处理脚本内运行 copy。

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

  • 附属文件
    要附加文件,请指定单个目标文件,多个源文件(使用通配符或文件 1 + 文件 2 + 文件 3 格式)。

  • Destination 的默认值
    如果省略 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 命令设置 Destination 文件的存档属性
    xcopy 命令创建具有存档属性设置的文件,无论源文件中是否设定了此属性。有关文件属性和 attrib 的详细信息,请参阅“相关主题”。

  • 比较 xcopy 和 diskcopy
    如果磁盘的子目录中包含文件,要将其复制到具有不同格式的磁盘中,请使用 xcopy 命令,而不要使用 diskcopy。因为 diskcopy 命令是一个磁道接一个磁道地复制磁盘,所以需要源磁盘和目标磁盘的格式必须相同。xcopy 命令没有该要求。通常情况下请使用 xcopy,除非您需要完整的磁盘图像副本。

  • xcopy 的退出码
    要处理 xcopy 返回的退出码,请在批处理程序的 if 命令行上使用 errorlevel 参数。有关使用“if”处理退出码的批处理程序的范例,请参阅“相关主题”。下表列出每一个退出码和说明。
    退出码 说明
    0 文件复制没有错误。
    1 没有找到要复制的文件。
    2 用户按 CTRL+C 终止了 xcopy。
    4 出现了初始化错误。没有足够的内存或磁盘空间,或命令行上输入了无效的驱动器名称或语法。
    5 出现了磁盘写入错误。

2.3. 示例

  • 简单复制
	rem 复制文件
	xcopy a.txt abc.txt
	rem 复制文件到指定目录,如果目录不存在,则需要指定类型
	xcopy a.txt d:\abc
	rem 复制目录A到指定目录B(不包括子目录)
	xcopy A  D\
	rem 复制目录A到指定目录B(包括子目录)
	xcopy /e A D\
	rem 只复制目录,不复制文件
	xcopy /t A D\
  • 拷贝指定日期之后的文件
	rem 复制3-6-2018时间之后的文件到当前ABC目录
	xcopy *.txt ABC\ /d:3-6-2018
	rem 如果没有指定具体时间,则只复制目标目录中没有的文件
	xcopy *.txt ABC\ /d
  • 更新文件
	rem 只更新目标目录中已经存在的文件
	xcopy *.txt ABC\ /u
  • 复制指定类型文件
	@echo off
	rem 如果有更多类型可以存放在文件中进行遍历 
	for %%a in (*.dll *.txt) do (
	echo %%a
	xcopy /e %%a ABC\
	)
	pause
  • 复制指定类型外的文件
    通过文件指定不拷贝的文件名包含字符串,exclude.txt文件内容如下:

.obj
.list
.pdb

	rem 拷贝除指定目录中记录的文件外的文件
	xcopy /e *.* ABC\ /exclude:exclude.txt
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值