更快的复制文件的方法

时间:2016-01-30 09:41:13

标签: vbscript

我正在尝试使用以下脚本复制文件。

Option Explicit

Const ForWriting = 2
Dim objFSO
Dim desfolder
Dim oShell
dim s

desfolder = "D:\Databases"
Set objFSO = CreateObject("Scripting.FileSystemObject")

Recurse objFSO.GetFolder("D:\Databases\Images")

Sub Recurse(objFolder)
    Dim objFile, objSubFolder

    For Each objFile In objFolder.Files
        If LCase(objFSO.GetExtensionName(objFile.Name)) = "tif" Then
            s = Right(objFile.Name, 10)
            S = Left(s, 1)
            If Left(s, 1) = "C" Then
                Set oShell = WScript.CreateObject("WScript.Shell")
                oShell.Run "xcopy.exe " & objFile & " " & desfolder & " /R /Y", _
                    0, True
            End If
        End If
    Next
    For Each objSubFolder In objFolder.SubFolders
        Recurse objSubFolder
    Next
End Sub

我要做的是检查文件夹和子文件夹中的文件。如果file是tif然后检查天气它在特定位置包含所需的字母“C”。并使用xcopy复制文件。

它工作正常,但速度很慢。 有没有更快的方法来做到这一点?

修改:我想要的是在文件夹及其子文件夹中找到c*.tif

1 个答案:

答案 0 :(得分:2)

然后不要使用xcopy。每次复制文件时,按照自己的方式生成新进程。只需使用文件对象的Copy方法即可完成。

Sub Recurse(objFolder)
    Dim objFile, objSubFolder

    For Each objFile In objFolder.Files
        If LCase(objFSO.GetExtensionName(objFile)) = "tif" Then
            If LCase(Left(objFile.Name, 1) = "c" Then
                objFile.Copy desfolder & "\"
            End If
        End If
    Next
    For Each objSubFolder In objFolder.SubFolders
        Recurse objSubFolder
    Next
End Sub

请注意,您的目标路径需要一个尾部反斜杠,因为它是一个文件夹(如果没有它,您将获得"permission denied" error)。否则,您需要指定目标路径,包括文件名,例如像这样:

objFile.Copy objFSO.BuildPath(desfolder, objFile.Name)