当文件元数据太长时,PowerShell 无法从“注释”字段获取文件元数据

标签 powershell

我想从 .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/

相关文章:

powershell - 有没有办法模拟美元?返回使用佩斯特?

powershell - 如何编写包装 sed/perl/etc 命令的 powershell 函数

PowerShell - Set-Culture 似乎没有改变任何东西

powershell - Azure ARM DSC 规模集部署 - 无法找到脚本

powershell - 针对 Azure 应用服务运行自定义脚本扩展

azure - 如何以编程方式将更新管理部署到 Azure 资源

powershell - 从两个文件中删除相似的行

sql-server - SQL Server 代理作业的 Powershell 无法识别 ConvertTo-CSV

powershell - 在 Powershell 中验证本地管理员密码更改

regex - 如何从一行中捕获多个正则表达式匹配到 Powershell 中的 $matches 魔术变量?