VB中可通过 scripting.filesystemobject 对象操作文件,其中复制文件或文件夹的函数参数可选覆盖或不覆盖。选择覆盖时,如果目标路径存在同名文件或文件夹,则替换掉已存在的文件。而选择不覆盖时,当目标路径存在同名文件或文件夹,程序会抛出异常。因此 scripting.filesystemobject 对象内没有函数可以实现遇到已存在文件跳过的功能。
下面通过 scripting.filesystemobject 对象来自己实现遇到已存在文件跳过的复制函数。
Sub XCopy(objfso, source, destination, overwrite) Dim objfol, objf, d_path 'Set objfso = CreateObject("scripting.filesystemobject") Set objfol = objfso.GetFolder(source) '创建目标文件夹 If Not objfso.FolderExists(destination) Then objfso.CreateFolder destination End If '复制源文件夹下所有文件 For Each objf In objfol.Files '生成目标文件路径 d_path = objfso.BuildPath(destination, objf.Name) '如果要求覆盖或文件不存在则复制 If overwrite Or Not objfso.FileExists(d_path) Then objf.Copy d_path End If Next '递归遍历子目录 For Each objf In objfol.SubFolders d_path = objfso.BuildPath(destination, objf.Name) XCopy objfso, objf.Path, d_path, overwrite Next End Sub
参数说明:
- objfso:该参数为 scripting.filesystemobject 对象。
- source:需要复制的文件夹路径。
- destination:目的文件夹路径。
- overwrite:该参数为True则覆盖同名文件,为False则跳过同名文件。
示例程序:
Dim objfso Set objfso = CreateObject("scripting.filesystemobject") XCopy objfso, "D:source", "D:destination", False