简而言之,我上传了几千首歌曲到 Google Play Music 以便随时随地收听,当我的旧驱动器最终坏掉时,我最终重新下载了这些歌曲。问题是,他们提供的下载工具做出了一些……有趣的决定。
下载的文件名存在以下两个问题:几乎每首非专辑歌曲(约 80%)的开头都添加了“00”,并且下载时文件名有限制。例如:“00 Nujabes - Eclipse (Feat_ Subst.mp3”,其中完整标题为“Nujabes - Eclipse (Feat. Substantial)”。完整标题被保存为 mp3 的实际标题。
不幸的是,Spotify 似乎只读取文件名而不读取文件标题,因此我不得不多次手动将标题复制/粘贴到文件名中。有没有办法批量将文件标题转换为实际文件名?除了无效字符。
答案1
我认为任何 ID3 批量编辑器都可以为您提供帮助。
例如Foobar2000或者Mp3标签
答案2
和电源外壳和shell.application
COM 对象,您无需第三方软件即可完成此操作。ExtendedProperty
方法用于检索元数据。
- 标题中的非法文件名字符替换为
_
- 名称前面添加非零轨道号
$StartFolder = 'C:\Downloaded\Files'
$MusicExts = @( 'mp3' , 'wma' ) # Add desired extenstions to list
$IllegalChar = '/|\\|:|\*|\?|"|<|>|\|' # Regex to match illegal filename characters
$LegalReplace = '_'
$Shell = New-Object -com shell.application
$StartFolder , ( Get-ChildItem $StartFolder -Directory -Recurse ).FullName | ForEach {
$Shell.NameSpace( $_ ).Items() | Where IsFolder -eq $False |
Where { ( $Ext = $_.Name.Split('.')[-1] ) -in $MusicExts } | ForEach {
$Track = $_.ExtendedProperty("{56A3372E-CE9C-11D2-9F0E-006097C686F6},7")
$Title = $_.ExtendedProperty("{F29F85E0-4FF9-1068-AB91-08002B27B3D9},2") -replace $IllegalChar , $LegalReplace
If ( $Track )
{
$_.Name = ( '{0:d2} {1}.{2}' -f ( $Track , $Title , $Ext ) )
}
Else
{
$_.Name = ( '{0}.{1}' -f ( $Title , $Ext ) )
}
}
}
FMTID/PID
从 NirSoft 获得的值属性系统查看器(所以我猜有第三方实用程序参与其中!哈哈)