标题: [技术讨论] VBS脚本String()字符串数组怎样读取其值 [打印本页]
作者: czjt1234 时间: 昨天 22:23 标题: VBS脚本String()字符串数组怎样读取其值
今天在测试FolderItem.ExtendedProperty方法时,发现了vbs的String()字符串数组类型
但是无法读取其值
比如 C:\Users\Administrator\Desktop\1.docx
在文档里面随便打几个字,然后,文件 属性 详细信息 作者 就可以读写了- s = "C:\Users\Administrator\Desktop\1.docx"
- Set oFSO = CreateObject("Scripting.FileSystemObject")
- Set oShell = CreateObject("Shell.Application")
- Set oFolder = oShell.NameSpace(oFSO.GetParentFolderName(s))
- Set oFolderItem = oFolder.ParseName(oFSO.GetFileName(s))
- s = oFolderItem.ExtendedProperty("DocAuthor")
- MsgBox TypeName(s) 'String()
- MsgBox VarType(s) '8200 = vbArray + vbString
复制代码
但是试了半天都无法读取其值
作者: flashercs 时间: 昨天 22:38
- s = oFolderItem.ExtendedProperty("System.Author")
复制代码
或者- s = oFolderItem.ExtendedProperty("{F29F85E0-4FF9-1068-AB91-08002B27B3D9}, 4")
复制代码
作者: czjt1234 时间: 8 小时前
本帖最后由 czjt1234 于 2024-9-21 05:44 编辑
回复 2# flashercs
也是一样的啊,无法读取String()的具体的值
还有
s = FolderItem.ExtendedProperty("Size")
这个TypeName(s)不能读取类型,报错
VarType(s)返回值为19
这是个什么类型?
MsgBox s 能正确显示数值
作者: flashercs 时间: 5 小时前
回复 3# czjt1234 - // Name: System.Size -- PKEY_Size
- // Type: UInt64 -- VT_UI8
- // FormatID: (FMTID_Storage) {B725F130-47EF-101A-A5F1-02608C9EEBAC}, 12 (PID_STG_SIZE)
复制代码
Size类型是uint64,而vbs不支持此数据类型,故VarType=19,而TypeName异常.而uint64其实可以通过CDbl()转换成Double;- // Name: System.Author -- PKEY_Author
- // Type: Multivalue String -- VT_VECTOR | VT_LPWSTR (For variants: VT_ARRAY | VT_BSTR) Legacy code may treat this as VT_LPSTR.
- // FormatID: (FMTID_SummaryInformation) {F29F85E0-4FF9-1068-AB91-08002B27B3D9}, 4 (PIDSI_AUTHOR)
复制代码
string()不能识别估计是因为VT_LPWSTR/VT_BSTR这两种字符串类型?
这些都可以被powershell正确识别
作者: czjt1234 时间: 5 小时前
回复 4# flashercs
感谢
作者: flashercs 时间: 5 小时前
回复 5# czjt1234
测试在vba中可以读取string()值的.
作者: jyswjjgdwtdtj 时间: 16 分钟前
本帖最后由 jyswjjgdwtdtj 于 2024-9-21 13:20 编辑
- $oshell=new-object -comobject shell.application
- $s="C:\Users\xx\Desktop\1.docx"
- $ofolder=$oshell.NameSpace(17)
- $ofolderitem=$ofolder.ParseName($s)
- $ss.GetType()
- #IsPublic IsSerial Name BaseType
- #-------- -------- ---- --------
- #True True String[] System.Array $ss.length#1
复制代码
用c#鼓捣半天总是报错
- [DispId(1610809345)]
- [return: MarshalAs(UnmanagedType.Struct)]
- object ExtendedProperty([In][MarshalAs(UnmanagedType.BStr)] string bstrPropName);
复制代码
vbs的ubound函数可以正常使用
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |