[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[技术讨论] VBS脚本String()字符串数组怎样读取其值

今天在测试FolderItem.ExtendedProperty方法时,发现了vbs的String()字符串数组类型
但是无法读取其值

比如 C:\Users\Administrator\Desktop\1.docx
在文档里面随便打几个字,然后,文件 属性 详细信息 作者 就可以读写了
  1. s = "C:\Users\Administrator\Desktop\1.docx"
  2. Set oFSO = CreateObject("Scripting.FileSystemObject")
  3. Set oShell = CreateObject("Shell.Application")
  4. Set oFolder = oShell.NameSpace(oFSO.GetParentFolderName(s))
  5. Set oFolderItem = oFolder.ParseName(oFSO.GetFileName(s))
  6. s = oFolderItem.ExtendedProperty("DocAuthor")
  7. MsgBox TypeName(s)    'String()
  8. MsgBox  VarType(s)    '8200 = vbArray + vbString
复制代码
但是试了半天都无法读取其值

QQ 20147578

  1. s = oFolderItem.ExtendedProperty("System.Author")
复制代码
或者
  1. s = oFolderItem.ExtendedProperty("{F29F85E0-4FF9-1068-AB91-08002B27B3D9}, 4")
复制代码
微信:flashercs
QQ:49908356

TOP

本帖最后由 czjt1234 于 2024-9-21 05:44 编辑

回复 2# flashercs


    也是一样的啊,无法读取String()的具体的值

还有
s = FolderItem.ExtendedProperty("Size")
这个TypeName(s)不能读取类型,报错
VarType(s)返回值为19
这是个什么类型?
MsgBox s 能正确显示数值

QQ 20147578

TOP

回复 3# czjt1234
  1. //  Name:     System.Size -- PKEY_Size
  2. //  Type:     UInt64 -- VT_UI8
  3. //  FormatID: (FMTID_Storage) {B725F130-47EF-101A-A5F1-02608C9EEBAC}, 12 (PID_STG_SIZE)
复制代码
Size类型是uint64,而vbs不支持此数据类型,故VarType=19,而TypeName异常.而uint64其实可以通过CDbl()转换成Double;
  1. //  Name:     System.Author -- PKEY_Author
  2. //  Type:     Multivalue String -- VT_VECTOR | VT_LPWSTR  (For variants: VT_ARRAY | VT_BSTR)  Legacy code may treat this as VT_LPSTR.
  3. //  FormatID: (FMTID_SummaryInformation) {F29F85E0-4FF9-1068-AB91-08002B27B3D9}, 4 (PIDSI_AUTHOR)
复制代码
string()不能识别估计是因为VT_LPWSTR/VT_BSTR这两种字符串类型?

这些都可以被powershell正确识别
1

评分人数

微信:flashercs
QQ:49908356

TOP

回复 4# flashercs


    感谢

QQ 20147578

TOP

回复 5# czjt1234


    测试在vba中可以读取string()值的.
微信:flashercs
QQ:49908356

TOP

本帖最后由 jyswjjgdwtdtj 于 2024-9-21 13:34 编辑
  1. $oshell=new-object -comobject shell.application
  2. $s="C:\Users\xx\Desktop\1.docx"
  3. $ofolder=$oshell.NameSpace(17)
  4. $ofolderitem=$ofolder.ParseName($s)
  5. $ss=$ofolderitem.ExtendedProperty("DocArthor")
  6. $ss.GetType()
  7. #IsPublic IsSerial Name                                     BaseType
  8. #-------- -------- ----                                     --------
  9. #True     True     String[]                                 System.Array
  10. $ss.length
  11. #1
复制代码

用c#鼓捣半天总是报错
  1.     [DispId(1610809345)]
  2.     [return: MarshalAs(UnmanagedType.Struct)]
  3.     object ExtendedProperty([In][MarshalAs(UnmanagedType.BStr)] string bstrPropName);
复制代码
vbs的ubound函数可以正常使用至于为什么会是个string()可能是允许一个文档有多个作者吧
你好

TOP

返回列表