如何用PowerShell获取文件「详细信息」选项卡中的媒体类扩展属性?
解决PowerShell无法获取MP3媒体元数据的问题
哥们,我太懂你这困扰了——Get-ItemProperty和Get-ChildItem只能捞到文件系统层面的属性(比如创建时间、文件大小),根本碰不到MP3文件里藏的那些媒体元数据(比特率、流派、专辑这些都属于文件内容里的ID3标签,不是NTFS文件系统属性),所以你用那些命令肯定拿不到想要的信息。下面给你两种靠谱的解决办法:
方法一:用Windows Shell COM对象(无需额外安装)
Windows自带的Shell组件可以访问资源管理器里显示的所有文件详细属性,适合临时使用:
$filePath = "C:\你的MP3文件路径\example.mp3" # 初始化Shell对象 $shell = New-Object -ComObject Shell.Application $folder = $shell.Namespace((Split-Path $filePath)) $fileItem = $folder.ParseName((Split-Path $filePath -Leaf)) # 先枚举所有可用属性的索引和名称(方便你找到对应属性的编号) for ($i = 0; $i -lt 288; $i++) { $propName = $folder.GetDetailsOf($folder.Items, $i) if ($propName) { Write-Output "[$i] $propName" } } # 根据上面找到的索引获取你需要的属性值(示例) $album = $folder.GetDetailsOf($fileItem, 14) # 专辑 $genre = $folder.GetDetailsOf($fileItem, 16) # 流派 $bitRate = $folder.GetDetailsOf($fileItem, 168) # 比特率 Write-Output "`n=== MP3属性 ===" Write-Output "专辑: $album" Write-Output "流派: $genre" Write-Output "比特率: $bitRate"
注意:属性索引可能因Windows版本(Win10/Win11)略有差异,所以先执行枚举代码找到对应属性的准确编号是稳妥的做法。
方法二:用TagLibSharp库(专业媒体元数据处理)
如果需要经常处理媒体文件,推荐用TagLibSharp这个专门的库,属性名称直观,不用记索引:
# 先安装模块(首次运行) Install-Module -Name TagLibSharp -Scope CurrentUser -Force # 加载库并读取MP3属性 $filePath = "C:\你的MP3文件路径\example.mp3" $mediaFile = [TagLib.File]::Create($filePath) # 获取属性 $album = $mediaFile.Tag.Album $genre = $mediaFile.Tag.Genres -join ", " # 处理多流派情况 $bitRate = $mediaFile.Properties.AudioBitrate $duration = $mediaFile.Properties.Duration.ToString("mm\:ss") Write-Output "`n=== MP3详细属性 ===" Write-Output "专辑: $album" Write-Output "流派: $genre" Write-Output "比特率: $bitRate kbps" Write-Output "时长: $duration" # 释放资源 $mediaFile.Dispose()
这个方法不仅支持MP3,还能处理其他主流媒体格式(比如MP4、FLAC),属性更全面,稳定性也更好。
内容的提问来源于stack exchange,提问作者ShellOfPower
相关产品推荐
相关产品推荐

