Windows下使用CMD命令复制多层级目录

时间:2022-06-07 12:53:44

       之前摸索中知道了如何进行目录的遍历,有时候需要拷贝一个目录树的文件夹结构的时候我会借用这个功能写个简单的脚本来实现目录树文件夹层级的拷贝。这样的拷贝其实是创建。后来为了偷懒,也曾经直接把整个目录加文件拷贝一下之后写个脚本删除里面所有的文件。

       在一次无意的折腾中发现了Windowsxcopy命令的一个功能,一下子惊叹原来拷贝一个目录时这么简单!

       下面是命令帮助中的命令使用说明:

F:\多媒体>xcopy /?

复制文件和目录树。

 

XCOPY source[destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]

                           [/C] [/I] [/Q] [/F][/L] [/G] [/H] [/R] [/T] [/U]

                           [/K] [/N] [/O] [/X][/Y] [/-Y] [/Z] [/B] [/J]

                          [/EXCLUDE:file1[+file2][+file3]...]

 

  source      指定要复制的文件。

  destination 指定新文件的位置和/或名称。

  /A          仅复制有存档属性集的文件,

               但不更改属性。

  /M          仅复制有存档属性集的文件,

               并关闭存档属性。

  /D:m-d-y    复制在指定日期或指定日期以后更改的文件。

               如果没有提供日期,只复制那些

               源时间比目标时间新的文件。

  /EXCLUDE:file1[+file2][+file3]...

               指定含有字符串的文件列表。每个字符串

               在文件中应位于单独的一行。如果任何

               字符串与复制文件的绝对路径的任何部分相符,

               则排除复制该文件。例如,

               指定如 \obj\ 或 .obj 的字符串会分别

               排除目录 obj 下面的所有文件或带有

               .obj 扩展名的所有文件。

  /P          创建每个目标文件之前提示你。

  /S          复制目录和子目录,不包括空目录。

  /E          复制目录和子目录,包括空目录。

               与 /S /E 相同。可以用来修改 /T。

  /V          验证每个新文件的大小。

  /W          提示你在复制前按键。

  /C          即使有错误,也继续复制。

  /I          如果目标不存在,且要复制多个文件,

               则假定目标必须是目录。

  /Q          复制时不显示文件名。

  /F          复制时显示完整的源文件名和目标文件名。

  /L          显示要复制的文件。

  /G          允许将加密文件复制到

               不支持加密的目标。

  /H           也复制隐藏文件和系统文件。

  /R          覆盖只读文件。

  /T          创建目录结构,但不复制文件。不

               包括空目录或子目录。/T /E 包括

               空目录和子目录。

  /U          只复制已经存在于目标中的文件。

  /K          复制属性。一般的 Xcopy 会重置只读属性。

  /N          用生成的短名称复制。

  /O          复制文件所有权和ACL 信息。

  /X          复制文件审核设置(隐含 /O)。

  /Y          取消提示以确认要覆盖

               现有目标文件。

  /-Y         要提示以确认要覆盖

               现有目标文件。

  /Z          在可重新启动模式下复制网络文件。

  /B          复制符号链接本身与链接目标。

  /J          复制时不使用缓冲的 I/O。推荐复制大文件时使用。

 

开关 /Y 可以预先在 COPYCMD 环境变量中设置。

这可能被命令行上的 /-Y 覆盖。

       其中,这里谈到的这个功能其实就是命令参数T的使用。接下来模拟一下,把我磁盘上的照片文件夹目录给模拟创建出来。测试记录如下:

F:\多媒体>dir

 驱动器 F 中的卷没有标签。

 卷的序列号是 3416-8F76

 

 F:\多媒体 的目录

 

2017/04/03  23:10   <DIR>          .

2017/04/03  23:10   <DIR>          ..

2017/07/06  23:41   <DIR>          01_音乐

2017/06/26  23:45   <DIR>          02_电影

2017/06/11  21:54   <DIR>          03_照片

               0 个文件              0 字节

               5 个目录106,292,830,208 可用字节

 

F:\多媒体>xcopy 03_照片 new_dir_root /T /I

 

F:\多媒体>dir

 驱动器 F 中的卷没有标签。

 卷的序列号是 3416-8F76

 

 F:\多媒体 的目录

 

2017/08/31  00:27   <DIR>          .

2017/08/31  00:27   <DIR>          ..

2017/07/06  23:41   <DIR>          01_音乐

2017/06/26  23:45   <DIR>          02_电影

2017/06/11  21:54   <DIR>          03_照片

2017/08/31  00:27   <DIR>          new_dir_root

               0 个文件              0 字节

               6 个目录106,292,830,208 可用字节

 

F:\多媒体>cd new_dir_root

 

F:\多媒体\new_dir_root>tree

文件夹 PATH 列表

卷序列号为 000000CE3416:8F76

F:.

├─I54-阳台山

├─I56-恭王府

├─I57-颐和园

└─青岛照片

    ├─iPhone7

    └─房屋设计

 

F:\多媒体\new_dir_root>tree /f

文件夹 PATH 列表

卷序列号为 000000D03416:8F76

F:.

├─I54-阳台山

├─I56-恭王府

├─I57-颐和园

└─青岛照片

    ├─iPhone7

└─房屋设计

补充说明一点:参数I的作用按照帮助信息说明是如果目标不存在的时候则假定目标是个目录。其实,这里使用这个的目的就是能够创建容纳拷贝的目录树文件夹结构的父目录。