我正在尝试使用以下脚本复制文件。
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
。
答案 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)