用VB脚本复制文件夹并跳过重复文件

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