有没有办法批量编辑 mp3 文件并用文件标题替换文件名?

有没有办法批量编辑 mp3 文件并用文件标题替换文件名?

简而言之,我上传了几千首歌曲到 Google Play Music 以便随时随地收听,当我的旧驱动器最终坏掉时,我最终重新下载了这些歌曲。问题是,他们提供的下载工具做出了一些……有趣的决定。

下载的文件名存在以下两个问题:几乎每首非专辑歌曲(约 80%)的开头都添加了“00”,并且下载时文件名有限制。例如:“00 Nujabes - Eclipse (Feat_ Subst.mp3”,其中完整标题为“Nujabes - Eclipse (Feat. Substantial)”。完整标题被保存为 mp3 的实际标题。

不幸的是,Spotify 似乎只读取文件名而不读取文件标题,因此我不得不多次手动将标题复制/粘贴到文件名中。有没有办法批量将文件标题转换为实际文件名?除了无效字符。

例子

答案1

我认为任何 ID3 批量编辑器都可以为您提供帮助。

例如Foobar2000或者Mp3标签

答案2

电源外壳shell.applicationCOM 对象,您无需第三方软件即可完成此操作。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 获得的值属性系统查看器(所以我猜有第三方实用程序参与其中!哈哈)

相关内容