VBA FileSystemObject.CopyFolder(Source, Destionation, Overwrite=True) 用来复制文件夹,它会复制指定的文件夹及它下层所有级别的文件夹和文件。
FileSystemObject.CopyFolder 的设计非常诡异,表现在以下几个方面。
第一点,指定待复制的原始文件夹的参数 Source 中路径的最后一个部分可以有通配符 * 和 ? ,这其实很好理解,按正常理解它会复制原始文件夹中符合筛选条件的所有下级文件,是吧?但你想错误了,通配符并不能匹配原始文件夹中的第一层文件,而会复制原始文件夹中的第二层及更深层次的所有文件夹和文件,即使不匹配通配符的子文件夹和子文件夹中的文件也会复制。比如。- Option Explicit
- Sub CopyFolder()
- Dim Fso As FileSystemObject
- Set Fso = CreateObject("Scripting.FileSystemObject")
- Fso.CopyFolder "C:\Users\wuxiancheng\Downloads\aa\??.???", "C:\Users\wuxiancheng\Downloads\bb"
- End Sub
复制代码 以上代码会复制 aa 文件夹中所有的子文件夹及它们的下级文件夹和文件,但不会复制 aa 文件夹中的普通文件,也就是说 ??.??? 实际上变成了 * 或 *.*,但又遗漏了第一层级的普通文件。
第二点,Source 参数表示的原始文件夹的路径不能以 \ 结尾,否则会找不到文件夹,而 Destination 参数表示的目标文件夹的路径可以以 \ 结尾。
第三点,如果原始文件夹的路径包含通配符,或者目标文件夹的路径以 \ 结尾,目标文件夹必须存在,否则会找不到目标文件夹。
第四点,如果原始文件夹的路径不包含通配符,并且目标文件夹的路径不以 \ 结尾,目标文件夹及任何中间层级的文件夹在不存在时都会自动创建,原始文件夹会整体复制到目标文件夹中,并且包含原始文件夹本身这一层文件夹。 |
|