大家好晚上好!上一期我们认识了FSO这位“文件夹管家”,学会了如何管理文件夹。今天,我们接着请出这位得力助手,让它来大显身手,带我们玩转电脑里的各种文件

判断文件是否存在
FileExists 用于判断指定的文件在磁盘上是否存在,这是一个基础且关键的防错操作,通常在执行文件复制、移动、删除或读取前使用,以避免因文件不存在而引发运行时错误。与FolderExists 作用相同,只是一个用于文件一个用于文件夹
FileExists 很少单独使用,通常作为条件判断的一部分,嵌入到更复杂的文件操作流程中,参考代码如下:
Dim fso As ObjectSet fso = CreateObject("Scripting.FileSystemObject")If fso.FileExists("D:\常用文件\test103.txt") Then' 文件存在时的处理代码,如对文件的删除、移动、复制、读取等操作End If
由以上代码可知,使用FileExists 前,也必须先创建 FileSystemObject 对象实例
另外,使用该方法还需要注意以下两点:
-
路径格式问题:VBA中路径分隔符应使用反斜杠 \,使用双反斜杠 \\ 或正斜杠 / 可能导致方法失败
-
权限问题:FileExists 仅检查文件是否存在,不检查当前用户是否有读取或写入该文件的权限,因此即使返回 True,后续也可能会因权限不足导致操作失败

删除文件
DeleteFile方法能够安全、灵活地删除一个或多个文件,并可通过参数控制对只读文件的处理方式,其语法结构清晰,便于理解:
object.DeleteFile filespec[, force]
其中,
-
object 是一个已创建的FileSystemObject对象实例的名称
-
filespec则是要删除的文件路径和名称,类型为字符串(String),其中文件名可以使用通配符(如 *.* 或 *.txt)来匹配和删除多个文件
-
force 是可选参数,用于决定是否强制删除具有只读属性的文件。默认值为 False,即不删除只读文件;若设置为 True,则会忽略文件的只读属性并执行删除
应用一:单文件删除
删除指定的单个文件,即使该文件为只读也照删不误
Dim fso As ObjectSet fso = CreateObject("Scripting.FileSystemObject")If fso.FileExists("D:\常用文件\test103.txt") Thenfso.DeleteFile "D:\常用文件\test103.txt", TrueEnd If
应用二:多文件删除
在filespec参数中使用通配符来实现批量删除文件,例如以下代码将会删除掉指定路径下的所有文本文件
fso.DeleteFile "D:\常用文件\*.txt", True
应用三:删除文件夹下所有文件
结合GetFolder方法和遍历Files集合来实现,代码结构更清晰,也便于在删除前进行其他操作(如记录日志)
Dim fso As Object, folder As Object, file As ObjectSet fso = CreateObject("Scripting.FileSystemObject")Set folder = fso.GetFolder("D:\Backups")For Each file In folder.Filesfso.DeleteFile file.path, True '强制删除只读文件Next file
此处需要注意,这段代码只会删除指定文件夹(folder)根目录下的文件,而不会删除其任何子文件夹(例如“Backups子文件夹”)中的文件,如下图所示


复制与移动文件
FSO中对文件复制和移动方法,无论是语法上还是操作上都类似于上期讲的文件夹的操作,可以互相参考使用,效率加倍
3.1复制
CopyFile方法是进行文件复制操作,它功能强大且灵活,允许将单个或多个文件从一个位置复制到另一个位置,其语法和参数如下:
object.CopyFile source, destination[, overwrite]
此处需要注意,无论overwrite参数是True还是False,如果目标文件具有“只读”属性,CopyFile操作将失败,这一点与CopyFolder也是一致的。换句话说就是只读文件是无解的
接下来我们聊一聊CopyFile的几个使用场景
场景一,复制单个文件并保留原名
fso.CopyFile "D:\常用文件\Backup_001.txt", "D:\Backups\"
重要提醒:目标路径 D:\Backups\ 末尾的反斜线(\)是一个路径分隔符,其作用是向 CopyFile 方法明确指出,D:\Backups\ 是一个已经存在的文件夹,需要将源文件复制到该文件夹内
反之,如果没有末尾的反斜线,CopyFile 方法会将其解释为一个新的完整文件名,这意味着它会尝试将源文件复制并重命名为 Backups
场景二,复制单个文件并重命名
fso.CopyFile "D:\常用文件\Backup_001.csv", "D:\Backups\Sales_20251228.csv"
以上代码是在目标路径中指定新文件名,以实现复制并重命名文件
场景三,使用通配符批量复制文件
fso.CopyFile "D:\常用文件\*.csv", "D:\Backups\"
使用通配符是CopyFile方法的一大优势,但需要注意,通配符只能用在source参数的最后一个路径组件中。例如以上代码,复制某个文件夹下所有特定类型的文件
至此,是不是越看越与CopyFolder方法相似呢?简直是一个模子刻出来的
3.2 移动
oveFile方法能将一个或多个文件从一个位置移动到另一个位置,并支持通配符进行批量操作,其语法为:
object.MoveFile source, destination
一看到语法就有一种似曾相识燕归来的感觉,不错,和MoveFolder如出一辙,就不再详细介绍了,直接看使用
使用一,移动文件并重命名
fso.MoveFile "D:\常用文件\Backup_001.csv", "D:\Backups\Backup_20251228.csv"
移动文件到Backups路径,并同时将文件名由Backup_001.csv改为Backup_20251228.csv
使用二,仅移动文件不重命名
fso.MoveFile "D:\常用文件\Backup_001.csv", "D:\Backups\"
同样目标路径以反斜杠结尾,则被视为文件夹
使用三,使用通配符批量移动文件
fso.MoveFile "D:\常用文件\*.*", "D:\Backups\"
MoveFile方法支持使用通配符(如*和?)来批量移动符合模式的文件,例如以上语句会将文件夹下的所有文件移动到目标路径下
友情提醒:如果source中使用的通配符没有匹配到任何文件,方法也是会报错的

获取文件属性
GetFile方法是获取指定文件对象的核心工具,它允许我们访问并操作文件的详细属性和信息,是进行高级文件管理的基础
GetFile会返回一个代表该文件的“对象模型”,通过这个对象,我们可以查询文件的详细信息(如大小、日期、类型等),并调用其方法(如.Copy、.Move、.Delete)来执行操作
例如,获取指定文件信息
Dim fso As Object, fileObj As ObjectDim infoMsg As StringSet fso = CreateObject("Scripting.FileSystemObject")'获取File对象Set fileObj = fso.GetFile("D:\常用文件\Backup_001.csv")' 通过File对象的属性获取详细信息With fileObjinfoMsg = "文件名称:" & .Name & vbCrLf & _"文件类型:" & .Type & vbCrLf & _"文件大小:" & Format(.Size / 1024, "0.00") & " KB" & vbCrLf & _"完整路径:" & .path & vbCrLf & _"所在文件夹:" & .ParentFolder & vbCrLf & _"创建时间:" & .DateCreated & vbCrLf & _"修改时间:" & .DateLastModified & vbCrLf & _"访问时间:" & .DateLastAccessedEnd WithMsgBox infoMsg, vbInformation, "文件信息"
执行后结果如下:


结束语
最后小贴士:FSO对象没有提供直接的文件或文件夹重命名功能。如需重命名,通常需要结合使用 MoveFile 或 MoveFolder 方法
好了,今天的分享就到这里了,咱们下期继续
公众号同时也在不间断地分享免费的编程案例,如果想学习更多的编程知识,无论是用来提升自动化办公效率还是想提升自我,都可以关注我的公众号“努力鸭是黑色的”,解锁更多的VBA技能

837

被折叠的 条评论
为什么被折叠?



