VBScript中GetDetailsOf方法返回属性名而非实际值的问题
我来帮你搞定这个VBScript的痛点!你说的情况太常见了——VBScript遍历速度快,但之前的代码只返回属性名称;VBA能拿到实际值却慢得让人头疼。咱们直接改代码解决问题:
问题根源
你之前的代码应该只是枚举了文件的属性名称集合,没有调用正确的方法去读取属性的实际值。要拿到具体内容,得用Shell对象的ExtendedProperty方法,直接通过属性名称获取对应的值。
完整可运行代码
Option Explicit Dim objShell, objFolder, objFolderItem, strFolderPath, objFile Dim author, lastModifiedBy ' 创建Shell应用对象 Set objShell = CreateObject("Shell.Application") ' 弹出文件夹选择对话框,让用户选择目标目录 Set objFolder = objShell.BrowseForFolder(0, "选择要遍历的文件夹:", 0, 0) If Not objFolder Is Nothing Then strFolderPath = objFolder.Self.Path WScript.Echo "正在遍历文件夹: " & strFolderPath & vbCrLf ' 获取文件夹的Namespace对象,用于访问文件属性 Set objFolder = objShell.Namespace(strFolderPath) ' 遍历文件夹中的每个项目 For Each objFolderItem In objFolder.Items ' 只处理文件,跳过子文件夹 If objFolderItem.IsFileSystem And Not objFolderItem.IsFolder Then WScript.Echo "文件名: " & objFolderItem.Name ' 获取Author属性值 author = objFolderItem.ExtendedProperty("Author") If IsEmpty(author) Then WScript.Echo " Author: 无" Else WScript.Echo " Author: " & author End If ' 获取Last Modified By属性值(兼容部分文件的"Last Saved By"属性) lastModifiedBy = objFolderItem.ExtendedProperty("Last Modified By") If IsEmpty(lastModifiedBy) Then lastModifiedBy = objFolderItem.ExtendedProperty("Last Saved By") If IsEmpty(lastModifiedBy) Then WScript.Echo " Last Modified By: 无" Else WScript.Echo " Last Modified By: " & lastModifiedBy End If Else WScript.Echo " Last Modified By: " & lastModifiedBy End If WScript.Echo vbCrLf End If Next Else WScript.Echo "未选择任何文件夹,程序退出。" End If ' 释放资源 Set objFolderItem = Nothing Set objFolder = Nothing Set objShell = Nothing
代码关键说明
- 可视化选文件夹:用
BrowseForFolder让你不用硬编码路径,灵活选择目标目录 - 获取实际属性值:核心是
objFolderItem.ExtendedProperty("属性名称"),直接读取对应属性的内容,而不是只拿名称 - 兼容性处理:部分文件(比如Office文档)的“最后修改者”属性可能叫
Last Saved By,所以加了 fallback 判断,避免拿不到值的情况 - 空值处理:判断属性为空时输出“无”,避免控制台显示空行,更清晰
运行方式
把代码保存为GetFileProps.vbs,双击运行即可,会弹出文件夹选择框,选好后就会在控制台输出每个文件的指定属性值。
内容的提问来源于stack exchange,提问作者Torc
相关产品推荐
相关产品推荐

