参考 Microsoft Scripting Runtime 使用 VBA。我正在尝试比较两个不同目录中的文件名,以查找两个目录中是否存在同一个文件。但是,我不是在寻找完全匹配的;我想去掉某些类型的前缀,例如 , A-12234.pdf, 12234.pdfandA_ 12234.pdf应该被认为是彼此相等的。
假设我有一个函数stripPrefix()可以执行必要的字符串操作,将文件名更改为可以与其他文件名进行比较的版本——在前一种情况下,stripPrefix()将返回12234.pdf所有 3 个。然后我可以比较目录中的文件名c:\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()相同的文件名。我可以构建数组和每个文件名的剥离版本,但似乎我无法将它们与集合相关联,因为集合没有数字索引。我知道是因为我尝试使用:dir2for..next file1dir1Arraydir2ArrayFilesdir1dir2Files
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循环中增加一个计数器并使用计数器来引用数组,例如:
'after creating arrays of stripPrefix() for dir1 and dir2
ctr1=0
for each file1 in dir1.files
ctr2=0
for each file2 in dir2.files
if dir1array(ctr1)=dir2array(ctr2) then
debug.print file1.name & " matches " & file2.name
end if
ctr2=ctr2+1
next file2
ctr1=ctr1+1
next file1
但这似乎很笨拙。有没有更好的方法来处理这个文件名比较操作?