'••••••••••••••••••••••••••••••• VBS ••••••••••••••••••••••••••••••
' Запись MP3-тегов [Название], [Альбом], [Исполнитель], взятых из
' базовых имён файлов по шаблону: [Альбом]-[Исполнитель]-[Название]
'
' Примечание: 1) Элементы шаблона могут отсекаться слева направо.
' 2) Если слева имени имеется номер, то он и станет соотв. тегом.
'
' 2 варианта ключей:
' 1) /l:%WL (приоритетный - только для выбранных в панели файлов)
' 2) /p:[<Путь к каталогу с MP3-файлами>]
' /r:<выкл (умол.)/вкл обработку всей структуры каталога: 0/1>
' Вспомогательный ключ предварительной очистки всех тегов: /d:1
'
' Примеры: /l:%WL | /p:"%P" /r:1 | /d:1 /p:"%P"
'
Option Explicit
'••••••••••••••••••••••••• Пути к утилитам ••••••••••••••••••••••••
Const ID3Edit = "%COMMANDER_PATH%\Utils\Tags\ID3\id3.exe"
Const TagEdit = "%COMMANDER_PATH%\Utils\Tags\Tag\Tag.exe"
'••••••••••••••••••••••••••••••••••••••••••••• Автор: Flasher © •••
Dim Del, Folder, Sec, Recurse, Regexp, WMP, WSH, ShA, FSO, List, F, Check
Const Title = " Заполнение тегов в MP3 "
With WScript.Arguments.Named
If .Count = 0 Then WScript.Quit
If .Exists("d") Then Del = .Item("d")
If .Exists("l") Then
List = .Item("l")
Else
If .Exists("p") Then Folder = .Item("p") Else _
MsgBox "Укажите ключ /p:<Путь к папке с MP3> !", 4144, Title : WScript.Quit
If .Exists("r") Then Recurse = .Item("r")
End If
End With : Set Regexp = New Regexp
Set WSH = CreateObject("WScript.Shell")
Set ShA = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
If Folder <> "" And Not FSO.FolderExists(Folder) Then _
MsgBox "Путь каталога с MP3-файлами указан неверно!", 4144, Title : WScript.Quit
For Each F in Array(ID3Edit, TagEdit)
If Not FSO.FileExists(WSH.ExpandEnvironmentStrings(F)) Then MsgBox _
"Укажите верный путь к " & FSO.GetFileName(F) &"!", 4144, Title : WScript.Quit
Next : Regexp.Pattern = "^0*(\d+) *[\.\-]+ *"
If List <> "" Then
Set List = FSO.OpenTextFile(List,,,-1)
Do : F = List.ReadLine
If FSO.FileExists(F) And _
LCase(FSO.GetExtensionName(F)) = "mp3" Then FFile F : Check = 1
Loop Until List.AtEndOfStream
Else FFolder Folder End If
If Check = 1 Then MsgBox "Выполнено!", 4160, Title _
Else MsgBox "MP3 файлы не обнаружены!", 4144, Title
Sub FFolder(Dir)
Set Dir = ShA.NameSpace(Dir)
Dim Items : Set Items = Dir.Items
Items.Filter 8384, "*.mp3"
If Items.Count Then
For Each F in Items : FFile F.Path : Next : Check = 1
End If
If Recurse = 1 Then
Items.Filter 8352, "*"
For Each F In Items : FFolder F.Path : Next
End if
End Sub
Sub FFile(File)
Dim BN, Num, Track, Album, Artist, Tags, Ln
BN = Trim(FSO.GetBaseName(File)) : Num = ""
Track = "" : Album = "" : Artist = ""
With Regexp
If .Test(BN) Then Set Ln = .Execute(BN)(0) : Num = Ln.Submatches(0)
End With : If IsNumeric(Num) Then BN = Mid(BN, Len(Ln) + 1)
Tags = Split(BN, "-")
Select Case Ubound(Tags)
Case 0 Track = Trim(Tags(0))
Case 1 Artist = Trim(Tags(0)) : Track = Trim(Tags(1))
Case 2 Album = Trim(Tags(0)) : Artist = Trim(Tags(1)) : Track = Trim(Tags(2))
End Select
If Del = 1 Then WSH.Run """" & TagEdit & """ --remove """ & File & """", 0, True
WSH.Run """" & ID3Edit & """ -2 -natl """ & Num & """ """ & Artist & _
""" """ & Track & """ """ & Album & """ """ & File & """", 0, True
WSH.Run """" & TagEdit & """ --track """ & Num & """ --artist """ & Artist & """" &_
" --title """ & Track & """ --album """ & Album & """ """ & File & """", 0, True
End Sub |