2016-01-30 84 views
1

我試圖使用以下腳本複製文件。複製文件的更快方法

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 

我想要做的是檢查文件夾和子文件夾中的文件。如果文件是tif,然後檢查天氣,它包含在特定位置所需的字母「C」。並使用xcopy複製文件。

它工作正常,但速度很慢。 有沒有更快的方法來做到這一點?

編輯:我想要的確實是在文件夾及其子文件夾中找到c*.tif

回答

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) 
相關問題