【发布时间】:2012-02-23 22:28:33
【问题描述】:
考虑以下 VBScript,它在运行时会列出当前目录中的所有文件及其属性:
Option Explicit
Dim oShell : Set oShell = CreateObject("Shell.Application")
Dim oFSO : Set oFSO = CreateObject("Scripting.FileSystemObject")
Dim oFolder : Set oFolder = oShell.Namespace(oFSO.GetParentFolderName(Wscript.ScriptFullName))
Dim oFile, iPos, sHeader(999), sVal
' Get a list of the property names
For iPos = 0 to 999
sHeader(iPos) = oFolder.GetDetailsOf(oFolder.Items, iPos)
Next
' For each file in this folder, print the property name and the value
For Each oFile in oFolder.Items
WScript.Echo "Looking at " & oFile.Name
For iPos = 0 To 999
sVal = oFolder.GetDetailsOf(oFolder.ParseName(oFile.Name), iPos)
If sVal <> "" Then WScript.Echo sHeader(iPos) & " (" & iPos & "): " & sVal
Next
Next
如果我在仅包含此文件的文件夹中运行此程序,并且禁用了 Windows 设置“隐藏已知文件类型的扩展名”,则会得到以下(正确)输出:
D:\defect>cscript //NOLOGO list_metadata.vbs 查看 list_metadata.vbs 名称(0):list_metadata.vbs 大小 (1):740 字节 项目类型(二):VBScript脚本文件 修改日期(3):19/02/2012 12:26 创建日期 (4): 23/02/2012 22:16 访问日期 (5): 23/02/2012 22:16 属性(6):A 感知类型(9):未指定 拥有者 (10): HOME\Richard 种类(11):程序 评级 (19):未评级 电脑(53):HOME(这台电脑) 文件名 (155): list_metadata.vbs 共享 (173):否 文件夹名称(176):缺陷 文件夹路径 (177): D:\defect 文件夹 (178):缺陷 (D:) 路径 (180): D:\defect\list_metadata.vbs 类型 (182):VBScript 脚本文件 链接状态 (188):未解决 共享状态 (269):未共享
但是,如果我在启用“隐藏已知文件类型的扩展名”的情况下再次运行此程序,则每个项目的值与第一行中文件的属性和名称完全相同缺少扩展名:
D:\defect>cscript //NOLOGO list_metadata.vbs 查看 list_metadata 姓名 (0):姓名 尺码 (1): 尺码 项目类型(2):项目类型 修改日期(3):修改日期 ...删除了很多... 框架宽度(285):框架宽度 总比特率 (286):总比特率 大师关键词(调试)(287):大师关键词(调试) 大师关键词(调试)(288):大师关键词(调试)
有谁知道我可以如何修改此代码,以便无论此设置是否在 Windows 中应用,它都能正常工作?
【问题讨论】:
标签: windows file vbscript metadata