我想从 .WMA 文件中的 Comments 元数据字段中提取一些 xml 数据。 我正在使用 Technet 脚本专家专栏中的脚本来获取所有元数据,它列出了除注释字段之外的所有属性!
我同事的一些研究表明,当我们将“评论”字段中的数据缩短到 < 1024 字节时,“评论”字段中的数据会很好地列出。
在我看来,限制在于 Shell.Application 对象;当内容超过 1024 个字符时,它只返回一个空的 Comments 字段。另外,我没有列出每个属性,而是只获取评论,即编号 24。
我的示例文件包含 1188 字节,我认为文件会在那里,所以还没有结束太多。
这是我当前正在运行的脚本(为简洁起见删除了注释):
Function Get-FileMetaData
{
Param([string[]]$folder)
foreach($sFolder in $folder)
{
$a = 0
$objShell = New-Object -ComObject Shell.Application
$objFolder = $objShell.namespace($sFolder)
foreach ($File in $objFolder.items())
{
$FileMetaData = New-Object PSOBJECT
$hash += @{"Filename" = $($objFolder.getDetailsOf($File, 0)) }
$hash += @{"My Comment field" = $($objFolder.getDetailsOf($File, 24)) }
$hash += @{"Length" = $($objFolder.getDetailsOf($File, 24)).Length }
$FileMetaData | Add-Member $hash
$hash.clear()
} #end foreach
$a=0
$FileMetaData
} #end foreach $sfolder
}
Get-FileMetaData -folder "C:\DATA\wma" | fl
我可以使用另一种方法来提取完整的 XML 数据吗?
最佳答案
您可以尝试使用 http://taglib.org/ 中的 taglib-sharp dll
这里我将一个156 KB文件的内容复制到评论中:
[system.reflection.assembly]::loadfile("c:\temp\taglib-sharp.dll")
$data=[taglib.file]::create('c:\mp3\01. Stromae - Alors On Danse.mp3')
$data.Tag.Comment = (gc c:\temp\IMP_ERR.LOG)
$data.Save()
验证:
PS>$data=[taglib.file]::create('c:\mp3\01. Stromae - Alors On Danse.mp3') PS>$data.tag.Comment.length / 1KB
PS>155,2197265625
编辑
我能够对 wma 文件使用相同的代码
关于当文件元数据太长时,PowerShell 无法从“注释”字段获取文件元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26012657/