本帖最后由 yu2n 于 2015-1-2 21:35 编辑
我来重复造一下轮子:
音乐文件信息修正工具 - 修正ID3、文件名 by Yu2n@qq.com
环境:windows7 x64
功能:
1. 文件名格式 [为] “艺术家 - 标题”,并且ID3中没有时,自动将文件名中的“艺术家”、“标题”填充到ID3中。
2. 文件名格式 [不为] “艺术家 - 标题”,并且ID3中有时,自动将文件改名为“艺术家 - 标题”。
3. 文件名格式 [为] “艺术家 - 标题”,并且ID3中有时,提示用户选择修改。
4. 文件名格式 [不为] “艺术家 - 标题”,并且ID3中没有时,不作修改。
使用:
要使用本程序,请用鼠标拖放一个或多个音乐文件到本程序图标上。
提示:你得保证文件名与ID3中,至少有一个信息是正确的。(想要自动的话,可要加上联网查找+用户选择,不想做那么麻烦的了)- ''''音乐文件信息修正工具 - 修正ID3、文件名 by Yu2n@qq.com
- ''''http://www.bathome.net/thread-25671-1-1.html
-
- '' 生成参数列表,等待传入命令行
- Dim i, sArgs
- For i = 1 To WScript.Arguments.Count
- sArgs = sArgs & " " & """" & WScript.Arguments(i-1) & """"
- Next
-
-
- ' 以命令提示符环境运行(保留参数)
- Dim WH
- Set WH = GetObject("Winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("Select * from Win32_DesktopMonitor")
- For Each aWH in WH
- TW = Int(aWH.ScreenWidth/8)
- Next
- Set WH = Nothing
- If TW <= 0 Then
- TW =128
- End If
- If (Lcase(Right(Wscript.FullName,11)) = "wscript.exe") Then
- CreateObject("WScript.Shell").Run( _
- "%Comspec% /c " & Chr(34) & "mode con cols=" & TW & "&Title 音乐文件信息修正工具 - 修正ID3、文件名 by Yu2n@qq.com &&Cscript.exe //NoLogo " & _
- Chr(34) & Wscript.ScriptFullName & Chr(34) & sArgs & Chr(34) & "&pause"),3
- Wscript.Quit
- End If
-
-
- '' 获取输入
- Dim sFilePath, sFileFolder, sFileName, sFileExt
- If WScript.Arguments.Count = 0 Then
- WScript.Echo "提示:错误的启动方式。要使用本程序,请用鼠标拖放一个或多个音乐文件到本程序图标上……"
- WScript.Quit
- Else
- Dim sMsg
- For i = 0 To WScript.Arguments.Count - 1
- sFilePath = WScript.Arguments(i)
-
- On Error Resume Next
-
- Call CorrectionsID3(sFilePath)
-
- If Err.Number <> 0 then
- WScript.Echo " 错误代号 " & Err.Number & "," & Err.Description & "。"
- End If
-
- On Error Goto 0
-
- WScript.Echo vbCr
- Next
- End If
-
- '' 修正音乐文件ID3与文件名
- Function CorrectionsID3(ByVal sFilePath)
-
- '' 获取文件信息
- Dim objFSO
- Set objFSO = CreateObject("Scripting.FileSystemObject")
- If Not objFSO.FileExists(sFilePath) Then Exit Function '''' 文件不存在时,退出函数
- sFileFolder = objFSO.GetFile(sFilePath).ParentFolder & "\" '''' 取得文件名、拓展名
- sFileExt = "." & objFSO.GetExtensionName(sFilePath)
- sFileName = objFSO.GetFile(sFilePath).Name
-
- WScript.Echo "文 件:" & sFileName
-
- If sFileExt = "." Then
- sFileExt = ""
- WScript.Echo "[失败] 无修正。 不支持该文件格式。"
- Exit Function
- Else
- sFileName = Left(sFileName, Len(sFileName) - Len(sFileExt))
- End If
-
-
- '' 以文件名为准,生成临时ID3信息
- Dim sFileArtist, sFileTitle
- If InStr(1, sFileName, "-", vbTextCompare) > 0 Then
- sFileArtist = Trim(Mid(sFileName, 1, InStr(sFileName, "-") - 1))
- sFileTitle = Trim(Mid(sFileName, InStr(sFileName, "-") + 1))
- End If
- If sFileArtist = "" Or sFileTitle = "" Then
- sFileArtist = "" : sFileTitle = ""
- End If
-
- '' 取得当前文件的ID3信息:http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/nftechsupt.web+WinBatch/OLE~COM~ADO~CDO~ADSI~LDAP+Get~Audio~File~Information.txt
- Dim objWMP, objSong, sID3Artist, sID3Title
- Set objWMP = CreateObject("WMPlayer.OCX")
- Set objSong = objWMP.newMedia(sFilePath)
- sID3Artist = Trim(objSong.GetItemInfo("Artist"))
- sID3Title = Trim(objSong.GetItemInfo("Title"))
- sDuration = objSong.GetItemInfo("Duration")
- If sDuration = "" Then
- WScript.Echo "[失败] 无修正。 不支持该文件格式。"
- Exit Function '''' 音乐长度,无此属性说明不支持修改ID3,退出函数
- End If
- If sID3Artist <> "" Then
- sID3Artist = Replace(sID3Artist, "&", ", ", vbTextCompare, -1, 1) '''' 修正符号号
- sID3Artist = Replace(sID3Artist, "?", "", vbTextCompare, -1, 1) '''' 修正乱码
- WScript.Echo " 艺术家:" & sID3Artist
- End If
- If sID3Title <> "" Then
- sID3Title = Replace(sID3Title, "?", "", vbTextCompare, -1, 1)
- WScript.Echo " 标 题:" & sID3Title
- End If
- If sID3Artist = "" Or sID3Title = "" Then
- sID3Artist = "" : sID3Title = ""
- End If
-
- '''' 信息不全时
- If sFileArtist = "" And sFileTitle = "" And _
- sID3Artist = "" And sID3Title = "" Then
- WScript.Echo "[失败] 无修正。 信息不全。"
- Exit Function
- End If
-
- '' '' 非完全匹配、信息冲突
- If Not (sFileArtist = sID3Artist And sFileTitle = sID3Title) Then
-
- '' 信息冲突时,提示
- If sFileArtist <> "" And sFileTitle <> "" And _
- sID3Artist <> "" And sID3Title <> "" Then
- sAsk = " 文件名称 “" & sFileName & sFileExt & "” 与 ID3 信息冲突,请选择:" & vbCrLf & vbCrLf & _
- " [ 是(Y) ] 将文件改名为:" & vbCrLf & _
- " " & sID3Artist & " - " & sID3Title & sFileExt & vbCrLf & vbCrLf & _
- " [ 否(N) ] 修改文件的ID3信息为:" & vbCrLf & _
- " 作者:" & sFileArtist & vbCrLf & _
- " 标题:" & sFileTitle & vbCrLf & vbCrLf & _
- " [ 取消 ] 不作变更"
- WScript.Echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
- WScript.Echo sAsk
- WScript.Echo "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
- Select Case MsgBox(sAsk, vbYesNoCancel, "音乐文件信息修正工具 - 修正ID3、文件名")
- Case vbYes
- sFileArtist = ""
- sFileTitle = ""
- Case vbNo
- sID3Artist = ""
- sID3Title = ""
- Case Else
- Exit Function
- End Select
- End If
-
- End If
-
- '' 以文件名为基准,修改ID3信息
- If (sFileArtist <> "" And sFileTitle <> "") And _
- (sID3Artist = "" Or sID3Title = "") Then
- '' 更新 ID3
- sID3Artist = sFileArtist
- sID3Title = sFileTitle
- With objSong
- '.setItemInfo "author", Trim(sID3Artist)
- .setItemInfo "artist", Trim(sID3Artist)
- .setItemInfo "title", Trim(sID3Title)
- ''.setItemInfo "WM/AlbumTitle", "" '"专辑标题"
- ''.setItemInfo "WM/Genre", "" '"流派"
- ''.setItemInfo "WM/Year", "" '"发行年"
- ''.setItemInfo "WM/TrackNumber", 1 'number '音轨只能是数字
- ''.setItemInfo "WM/Lyrics", "" '"歌词"
- ''.setItemInfo "Description", "yu2n@qq.com " & Now() '"备注"
- End With
- WScript.Echo "[成功] 已修正。 艺术家:" & Trim(objSong.GetItemInfo("Artist"))
- WScript.Echo "[成功] 已修正。 标 题:" & Trim(objSong.GetItemInfo("Title"))
- End If
-
- '' 添加备注,结束 objSong, objWMP ,更新 ID3。(必须在FSO移动操作之前)
- objSong.setItemInfo "Description", "Yu2n@qq.com corrections ID3 information on " & Now()
- Set objSong = Nothing
- Set objWMP = Nothing
-
- '' 以新的ID3为基准,重命名文件
- If sID3Artist <> "" And sID3Title <> "" Then
- Dim sFilePath2
- sFilePath2 = sFileFolder & sID3Artist & " - " & sID3Title & sFileExt
- If sFilePath <> sFilePath2 Then
- objFSO.MoveFile sFilePath, sFilePath2
- WScript.Echo "[成功] 已修正。 文件名:" & sID3Artist & " - " & sID3Title & sFileExt & " 。"
- Else
- WScript.Echo "[失败] 无修正。 文件名与ID3信息一致,不作变更。(或该文件部分损坏无法识别)"
- End If
- End If
- Set objFSO = Nothing
-
- End Function
复制代码 一些例子运行结果:- 文 件:5566 - 好久不见.mp3
- 艺术家:5566
- 标 题:
- [成功] 已修正。 艺术家:5566
- [成功] 已修正。 标 题:好久不见
- [失败] 无修正。 文件名与ID3信息一致,不作变更。(或该文件部分损坏无法识别)
-
- 文 件:073任贤齐-诛仙-我回来(清晰完整版).mp3
- 艺术家:073任贤齐
- 标 题:我回來
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 文件名称 “073任贤齐-诛仙-我回来(清晰完整版).mp3” 与 ID3 信息冲突,请选择:
-
- [ 是(Y) ] 将文件改名为:
- 073任贤齐 - 我回來.mp3
-
- [ 否(N) ] 修改文件的ID3信息为:
- 作者:073任贤齐
- 标题:诛仙-我回来(清晰完整版)
-
- [ 取消 ] 不作变更
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
- 文 件:129周慧敏.痴心换情深.mp3
- 艺术家:周慧敏---By fifu
- 标 题:痴心换情深
- [成功] 已修正。 文件名:周慧敏---By fifu - 痴心换情深.mp3 。
-
- 文 件:130陈慧娴-人生何处不相逢(粤).mp3
- 艺术家:陈慧娴
- 标 题:人生何处不相逢
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 文件名称 “130陈慧娴-人生何处不相逢(粤).mp3” 与 ID3 信息冲突,请选择:
-
- [ 是(Y) ] 将文件改名为:
- 陈慧娴 - 人生何处不相逢.mp3
-
- [ 否(N) ] 修改文件的ID3信息为:
- 作者:130陈慧娴
- 标题:人生何处不相逢(粤)
-
- [ 取消 ] 不作变更
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- [成功] 已修正。 文件名:陈慧娴 - 人生何处不相逢.mp3 。
-
- 文 件:164张雨生&张惠妹-最爱的人伤我最深.mp3.mp3
- 艺术家:张雨生, 张惠妹
- 标 题:最爱的人伤我最深.mp3
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 文件名称 “164张雨生&张惠妹-最爱的人伤我最深.mp3.mp3” 与 ID3 信息冲突,请选择:
-
- [ 是(Y) ] 将文件改名为:
- 张雨生, 张惠妹 - 最爱的人伤我最深.mp3.mp3
-
- [ 否(N) ] 修改文件的ID3信息为:
- 作者:164张雨生&张惠妹
- 标题:最爱的人伤我最深.mp3
-
- [ 取消 ] 不作变更
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- 错误代号 58,文件已存在。
-
- 请按任意键继续. . .
复制代码
|