使用Ruby从Windows文件中提取所选元数据

时间:2012-12-08 05:08:34

标签: ruby windows ntfs

我有一个拥有JPEG文件集合的用户,在Windows 7 NTFS文件系统上休息。

用户已使用Windows 7“详细信息”对话框注释了这些图像。对于每个文件,他们添加了标题,注释(可能与标题不同)和标签字段。

看起来标题作为EXIF数据的一部分存储在每个JPEG文件中。

然而,评论和标签字段不是。

我在替代数据流中寻找它们;没有人在场。我无法看到它们是否是NTFS扩展属性,因为我找不到专门列出这些属性的工具。

我的问题是:这个元数据存储在哪里,我如何从Ruby中访问它?

2 个答案:

答案 0 :(得分:2)

从Vista开始,有一个属性系统(12),其中属性存储在文件本身中以便于移植,与存储在备用数据流中的数据相反。参见Alex Martelli在this question中的答案,这与Python类似。如果我理解了这个答案,您将希望找到一种方法来挂钩Windows Search API并查询System.KeywordsSystem.Comment属性。

PowerShell可能是这种情况下的方法;例如,“Windows桌面搜索cmdlet”at this link部分中有一个示例。但是,您可以通过Ruby与COM对象或WMI进行通信。

答案 1 :(得分:1)

Eric的回答非常接近(感谢Eric)。

答案是Windows uses XMP embedded in the file存储一些这些信息。其他一些部分存储在EXIF中。

XMP是首先由Adobe开发的RDF格式。

然而,在Ruby中提取和操作XMP的支持很差 - github上有一些库,但没有很好的集成。

  • xmpleton不显示所有元数据;
  • xmp在Microsoft的元数据上崩溃;
  • fasttrack没有整合到rubygem.org基础设施中。

我感兴趣的三个领域:

  • “评论”存储在EXIF字段“XPComment”中。
  • “标题”存储在EXIF字段“XPTitle”下的EXIF中,并存储在“描述”字段中DC命名空间下的XMP中
  • “标签”存储在EXIF字段“XPKeyword”下的EXIF中,并存储在DC名称空间的XMP中作为“主题”字段列表。

我正在使用的方法是mini_exiftool,它包含了基于Perl的EXIFTool程序。