比较使用VBA的FileSystemObject获取的文件名的修改版本

时间:2011-11-15 23:41:04

标签: vba filesystemobject

使用VBA参考Microsoft Scripting Runtime。我正在尝试比较两个不同目录中的文件名,以查找两个目录中是否存在相同的文件。但是,我不是在寻找完全匹配的东西;我想删除某些类型的前缀,因此,例如,A-12234.pdf12234.pdfA_ 12234.pdf应该被视为彼此相等。

假设我有一个函数stripPrefix()执行必要的字符串操作,将文件名更改为可与其他文件进行比较的版本 - 在先前的情况下,stripPrefix()将返回{{1}然后我可以使用以下代码比较目录12234.pdfc:\dir1中的文件名:

c:\dir2

这里的大问题:每次迭代sub findMatchFilenames() dim fso as fileSystemObject dim dir1 as folder dim dir2 as folder dim file1 as file dim file2 as file set fso=new fileSystemObject set dir1=fso.getfolder("c:\dir1") set dir2=fso.getfolder("c:\dir2") for each file1 in dir1.files for each file2 in dir2.files if stripPrefix(file1.name)=stripPrefix(file2.name) then debug.print file1.name & " matches " & file2.name end if next file2 next file1 end sub 循环时,我都会在stripPrefix()中为dir2调用相同的文件名。我可以构建每个文件名的剥离版本的数组for..next file1dir1Array,但似乎我无法将它们与dir2ArrayFiles中的dir1个集合相关联因为dir2集合没有数字索引。我知道,因为我尝试使用:

Files

并从Set fso = New FileSystemObject Set folderObj = fso.GetFolder("c:\data") fileCount = folderObj.Files.Count For c = 1 To fileCount MsgBox c & " " & folderObj.Files(c).name Next 获得了“无效的过程调用或参数”。我想我可以在folderObj.Files(c).name循环中增加一个计数器并使用计数器返回数组,如:

for..next

但这看起来很笨重。有没有更好的方法来处理这个文件名比较操作?

2 个答案:

答案 0 :(得分:1)

为什么不创建目录2的字典对象,然后使用目录1搜索它。您可以在插入字典对象时去除前缀。

唯一的问题是,您可能没有在字典中使用唯一的文件名

例如,在剥离前缀

后,A-12345与A12345相同

答案 1 :(得分:1)

为什么不使用DIR使用通配符?

像(未经测试)的东西:

myFile = Dir("C:\*1234.pdf")
Do While myFile <> ""
If myFile <> "." And MyFile <> ".." Then
Msgbox myFile
End If
MyFile = Dir 
Loop

将其放入数组中。您也可以对其他目录执行相同的操作,然后比较两个数组。