参考 Microsoft Scripting Runtime 使用 VBA。我正在尝试比较两个不同目录中的文件名,以查找两个目录中是否存在同一个文件。但是,我不是在寻找完全匹配的;我想去掉某些类型的前缀,例如 , A-12234.pdf
, 12234.pdf
andA_ 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()
相同的文件名。我可以构建数组和每个文件名的剥离版本,但似乎我无法将它们与集合相关联,因为集合没有数字索引。我知道是因为我尝试使用:dir2
for..next file1
dir1Array
dir2Array
Files
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
循环中增加一个计数器并使用计数器来引用数组,例如:
'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
但这似乎很笨拙。有没有更好的方法来处理这个文件名比较操作?