我需要检查目录中是否存在文件。我想到的两个选项是使用正则表达式(vbscript.regexp
)来确定文件是否存在。另一种选择是使用FileSystemObject
的{{1}}方法。
使用正则表达式的缺点意味着我需要遍历目录中的每个文件并针对每个文件名测试正则表达式。其次,正则表达式方法在未来可能更难维护(正则表达式)。但是,我需要测试两个正则表达式,因为可能有相同文件的不同版本。对于其中一个文件,文件名的描述部分经常更改(好吧,这是谎言 - 它会在某个随机周期中发生变化),因此使用正则表达式将有助于匹配文件,无论这部分是什么=更强大的代码
使用FileExists
,我可以同时测试这两个文件,并根据每次检查返回的布尔值,处理可以继续。使用FileExists
的相关缺点是不支持通配符匹配,因此在考虑带有描述的文件名时,总是需要更新以反映新描述=更多维护问题。但是,它更容易掌握,更容易改变。
文件名格式:
FileExists
文件名的Data_Sheet_<yyyymmdd>_D.xlsx // the normal file
Data_Sheet_<yyyymmdd>_D_<some description>.xlsx // the alternate file
部分将由文件所在的当前文件夹确定。
问题:使用正则表达式或简单的FileExists查找文件会更好吗?
我将在Excel vba宏中使用上述任一方法。
答案 0 :(得分:2)
你看过Dir()
了吗?你可以传递它的通配符如my*file.pd?
也许它可能是一种妥协方式。当然你不会得到正则表达式的全部功能,但你可以限制你的文件,然后实际测试看看存在什么。
我个人会使用FileExists()
而不是循环遍历目录并测试每个文件。如果目录变得庞大,那么循环可能会永远存在。虽然如果使用Dir()
,可能会限制需要迭代的文件数量。加FileExists()
只是一行/语句和更清晰......但是你必须确保脚本运行时包含在你的项目中
http://techonthenet.com/excel/formulas/dir.php http://www.blueclaw-db.com/listbox-directory.htm http://www.hobbub.com/vba-vb-vsto/iterating-over-a-directory-with-a-dir-loop-loop-through-directory-vb/
第二和第三个链接有更好的迭代目录的示例。