Windows用.bat批处理文件拷贝文件和文件夹
2015年03月25日 11:14:22 Windows ⁄ 共 5480字 暂无评论 ⁄ 被围观 5,302次

无聊时,学习了下用 Window 的批处理文件,来实现一个路径下文件及文件夹到另一个路径下的拷贝,大概写一点手顺,供大家参考。

实验目的:把 F 盘下 test 文件夹中的所有文件和文件夹 COPY 到 D 盘下的 bak 文件夹下。

1. copy 命令
copy f:\\test\\. d:\\bak

结果:该命令命令只能拷贝主文件夹下的文件,不能拷贝其下的文件夹。也就是说只能把 test 中的文件拷贝到 bak下,文件夹则不能拷贝。而且,必须首先在 D 盘下手动建立好 bak 文件夹,否则 bak 无法生成。另外,看看下面这条命令:
copy f:\test d:\bak

这条命令,如果 D 盘已经有了 bak 文件夹,也也会复制所有文件成功,但如果没有 bak 文件夹,则会生成一个 bak 但却没有后缀名的文件,不是文件夹。

下面看看官方给出的 copy 命令的用法吧:

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当在命令行的文件列表之前有 /a 时,它适用于所有已列出的文件,直到 copy 遇到 /b。在这种情况下,/b 应用于文件前面的 /b。当 /a 在命令行上紧跟在文件列表之后时,它适用于所有已列出的文件,直到 copy 遇到 /b。在这种情况下,/b 应用于文件前面的 /b/a 参数的作用取决于它在命令行字符串中的位置。当 /a 紧随 Source 之后时,copy会将文件当作 ASCII(文本)文件,并复制第一个文件结束符前的数据。当 /a 紧随 Destination 之后时,copy 会添加文件结束符作为文件的最后一个字符。
  • 使用 /b/b 指定命令解释器读取目录中由文件大小指定的字节数。/bcopy 的默认值,除非 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 同时会显示每个文件已完成的复制操作的百分比。
  • 复制到设备以及从设备复制可以用设备名替换一次或多次出现的 sourcedestination
  • 在复制到设备时使用或省略 /bdestination 是设备时(例如,Com1 或 Lpt1),/b 将以二进制模式将数据复制到该设备。在二进制模式下,copy /b 会将所有字符(包括特殊字符,例如, CTRL+C、CTRL+S、CTRL+Z 以及换行符等)作为数据复制到设备。但是,如果省略了 /b,则将以 ASCII 模式将数据复制到设备。在 ASCII 模式下,特殊字符可能导致Windows XP 在复制过程中合并文件。有关详细信息,请参阅“合并文件”。
  • 使用默认目标文件如果不指定目标文件,将使用与源文件相同的名称、创建日期、创建时间来创建副本,并将新副本置于当前驱动器的当前目录中。如果源文件位于当前驱动器的当前目录中,而您没有为目标文件指定其他驱动器或目录,则 copy命令将终止并显示下列错误消息:File cannot be copied onto itself0 File(s) copied
  • 合并文件如果指定了使用加号 (+) 分隔的多个 sourcecopy 会将这些文件合并在单个文件之中。如果在 source 中使用了通配符(* 或 ?),但在 destination 中指定了单个文件名,则 copy 会将所有与 source 中的文件名匹配的文件合并,并使用在 destination 中指定的文件名来创建单个文件。除非使用了 /b 命令行选项,否则在任一种情形中,copy 都会假定合并的文件是 ASCII 文件。
  • 复制零长度文件Copy 不会复制 0 字节长度的文件。使用 xcopy 复制这些文件。
  • 更改文件的时间和日期如果要将当前的时间和日期指派给文件而不修改文件,请使用以下语法:copy /bSource+,,逗号表明省略了 Destination 参数。
  • 在子目录中复制文件要复制目录中的所有的文件和子目录,应该使用 xcopy 命令。有关 xcopy 的详细信息,请参阅“相关主题”。
  • 故障恢复控制台提供了带有不同参数的 copy 命令。

从上面可以看出,想要拷贝所有文件夹,copy 命令是实现不了的,必须用另一个拷贝的命令,那就是 xcopy

2. xcopy 命令
xcopy f:\test d:\test

结果:还是只能拷贝 test 下的所有文件,不能拷贝文件夹。并且输出命令后,会有下面提示,需要输入 D 回车才行。

目标 D:\test 是文件名
 还是目录名
 (F = 文件,D = 目录)?

但如果写成:
xcopy f:\test d:\test\

则不会有提示的,结果还是一样。也可以写成:
xcopy f:\test d:\test /i

效果和其后加“/”的效果一样,不会有提示。但如何才能把 test 下的所有文件夹等一并拷贝到 bak 中呢?其实很简单,加上参数“/e”即可,命令如下:
xcopy f:\test d:\test /i /e

结果:非常成功的拷贝到 bak 中了,如果想学习一下其它用法,参考下面官方给出的 xcopy 命令的用法吧:

Xcopy(复制)

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

语法

xcopySource [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
复制非空的目录和子目录。如果省略 /sxcopy 将在一个目录中工作。
/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
在可重启模式中通过网络复制。
/?
在命令提示符显示帮助。 

注释

  • 使用 /vXOX
  • 使用 /exclude列出每个文件的单独行中的每个字符串。如果列出的任何字符串与要复制的文件的绝对路径的任何部分匹配,就从复制进程排除该文件。例如,如果指定字符串 "\Obj\",则会排除 Obj 目录下的所有文件。如果指定字符串 ".obj",则排除具有 .obj 扩展名的所有文件。
  • 使用 /z如果在复制过程中丢失连接(例如,如果用于连接的服务器脱机),复制过程将在重新建立连接后恢复。/z 也显示每个文件完成的复制操作的百分比。
  • 在 COPYCMD 环境变量中使用 /y可在 COPYCMD 环境变量中使用 /y。在命令行上使用 /-y 可以覆盖该命令。默认情况下,会提示您覆盖,除非您从批处理脚本内运行 copy
  • 复制加密的文件将加密文件复制到不支持 EFS 的卷会导致错误。应首先解密文件或将文件复制到支持 EFS 的卷中。
  • 附属文件要附加文件,请指定单个目标文件,多个源文件(使用通配符或文件 1 + 文件 2 + 文件 3 格式)。
  • Destination的默认值如果省略 Destinationxcopy 命令将文件复制到当前目录。
  • 指定 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 的详细信息,请参阅“相关主题”。
  • 比较 xcopydiskcopy如果磁盘的子目录中包含文件,要将其复制到具有不同格式的磁盘中,请使用 xcopy 命令,而不要使用 diskcopy。因为 diskcopy 命令是一个磁道接一个磁道地复制磁盘,所以需要源磁盘和目标磁盘的格式必须相同。xcopy 命令没有该要求。通常情况下请使用 xcopy,除非您需要完整的磁盘图像副本。
  • xcopy的退出码要处理 xcopy 返回的退出码,请在批处理程序的 if 命令行上使用 errorlevel 参数。有关使用“if”处理退出码的批处理程序的范例,请参阅“相关主题”。下表列出每一个退出码和说明。
    退出码 说明
    0 文件复制没有错误。
    1 没有找到要复制的文件。
    2 用户按 CTRL+C 终止了 xcopy
    4 出现了初始化错误。没有足够的内存或磁盘空间,或命令行上输入了无效的驱动器名称或语法。
    5 出现了磁盘写入错误。

学习这些命令,找回了那种学习 Linux 命令的赶脚,^ ^

给我留言

留言无头像?