А я в извращенной форме (и с очень конкретными, специфическими именами файлов) смог 7 ТБ авишек переименовать и в итоге приклеить к PVD. На досуге выложу свой вариант, может кому и подойдет. Всё заняло всего один день и все файлы имеют теперь такой вид: Русское название (год)/Оригинальное_Название_(год)(озвучка)(качество).расширение При помощи скрипта одного, написанного под мои нужды. Основное, что нужно, это заполненная база PVD к которой подцеплены все файлы, одно пользовательское поле с озвучкой, например: (one);(two);(multi);(multi_d);(multi_z) - одноголосый, двухголосый, многоголосый, многоголосый дубляж, многоголосый закадровый и одно заполненное поле качество, например: (dvdrip);(hdrip);(tvrip);(satrip). И если у фильма не один файл, а более, то обязательно должен быть такой вид: любое название (CD1).расширение. Вот. Если есть возможность иметь указанные данные, то дело займет несколько минут. Ну или если кто шарит в програмировании думаю можно и скрипт поправть просто. Впринципе, вот код, сразу говорю, я в этом ничего не шарю, мне друг по быстрому накидал:
Set fso = CreateObject("Scripting.FileSystemObject")
Set ADOConn=CreateObject("ADODB.Connection")
ADOConn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\films_catalogs\PVD\Content\scripts\data.mdb;"
ADOConn.Open
Set QueryResult=CreateObject("ADODB.recordset")
Set Cmd = CreateObject("ADODB.Command")
Cmd.ActiveConnection = ADOConn
QueryResult.Open "Select * from films where movienum>0", ADOConn,3
QueryResult.MoveFirst
While not QueryResult.EOF
AllPaths=QueryResult.fields("Path").value
AllPathsNew=""
SepPos=Instr(1,AllPaths,"|")
MovieNum=cint(QueryResult.fields("movienum").value)
while SepPos>0
CurrentPath=mid(AllPaths,1,SepPos-1)
AllPaths=Mid(AllPaths,SepPos+1,Len(AllPaths)-SepPos)
FolderName=QueryResult.fields("Title").value
FbdnSym=Instr(1,FolderName,"/")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"/")
wend
FbdnSym=Instr(1,FolderName,"\")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"\")
wend
FbdnSym=Instr(1,FolderName,"|")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"|")
wend
FbdnSym=Instr(1,FolderName,"?")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"?")
wend
FbdnSym=Instr(1,FolderName,"*")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"*")
wend
FbdnSym=Instr(1,FolderName,":")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+"-"+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,":")
wend
FbdnSym=Instr(1,FolderName,">")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,">")
wend
FbdnSym=Instr(1,FolderName,"<")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"<")
wend
FbdnSym=Instr(1,FolderName,"""")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+"'"+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"""")
wend
NewPath=mid(CurrentPath,1,Instr(4,CurrentPath,"\"))+FolderName+" ("+cstr(QueryResult.fields("Year").value)+")"
if not FSO.FolderExists(NewPath) then
set f=FSO.CreateFolder(NewPath)
end if
SerNum=""
for i=1 to 1000
if instr(1,CurrentPath,"(CD"+cstr(i)+")")> 0 then
SerNum="(CD"+cstr(i)+")"
i=1000
end if
next
j=Len(CurrentPath)
while mid(CurrentPath,j,1)<>"." and j>0
j=j-1
wend
FileNameNew=QueryResult.fields("Original Title").value+"_("+cstr(QueryResult.fields("Year").value)+")"+"("+cstr(QueryResult.fields("Voice").value)+")"+"("+cstr(QueryResult.fields("Quality").value)+")"+SerNum+mid(CurrentPath,j,Len(CurrentPath)-j+1)
FolderName=FileNameNew
FbdnSym=Instr(1,FolderName,"/")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"/")
wend
FbdnSym=Instr(1,FolderName,"\")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"\")
wend
FbdnSym=Instr(1,FolderName,"|")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"|")
wend
FbdnSym=Instr(1,FolderName,"?")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"?")
wend
FbdnSym=Instr(1,FolderName,"*")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"*")
wend
FbdnSym=Instr(1,FolderName,":")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+"-"+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,":")
wend
FbdnSym=Instr(1,FolderName,">")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,">")
wend
FbdnSym=Instr(1,FolderName,"<")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"<")
wend
FbdnSym=Instr(1,FolderName,"""")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+"'"+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"""")
wend
FbdnSym=Instr(1,FolderName," ")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+"_"+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName," ")
wend
FileNameNew=FolderName
NewPath=NewPath+"\"+FileNameNew
AllPathsNew=AllPathsNew+NewPath+"|"
if CurrentPath<>NewPath then
if fso.FileExists(CurrentPath) then
set CurrentFile=fso.GetFile(CurrentPath)
CurrentFile.Move NewPath
else
msgbox "Файл "+CurrentPath+" не найден"
end if
END IF
SepPos=Instr(1,AllPaths,"|")
wend
CurrentPath=AllPaths
FolderName=QueryResult.fields("Title").value
FbdnSym=Instr(1,FolderName,"/")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"/")
wend
FbdnSym=Instr(1,FolderName,"\")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"\")
wend
FbdnSym=Instr(1,FolderName,"|")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"|")
wend
FbdnSym=Instr(1,FolderName,"?")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"?")
wend
FbdnSym=Instr(1,FolderName,"*")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"*")
wend
FbdnSym=Instr(1,FolderName,":")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+"-"+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,":")
wend
FbdnSym=Instr(1,FolderName,">")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,">")
wend
FbdnSym=Instr(1,FolderName,"<")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"<")
wend
FbdnSym=Instr(1,FolderName,"""")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+"'"+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"""")
wend
NewPath=mid(CurrentPath,1,Instr(4,CurrentPath,"\"))+FolderName+" ("+cstr(QueryResult.fields("Year").value)+")"
if not FSO.FolderExists(NewPath) then
set f=FSO.CreateFolder(NewPath)
end if
SerNum=""
for i=1 to 1000
if instr(1,CurrentPath,"(CD"+cstr(i)+")")> 0 then
SerNum="(CD"+cstr(i)+")"
i=1000
end if
next
j=Len(CurrentPath)
while mid(CurrentPath,j,1)<>"." and j>0
j=j-1
wend
FileNameNew=QueryResult.fields("Original Title").value+"_("+cstr(QueryResult.fields("Year").value)+")"+"("+cstr(QueryResult.fields("Voice").value)+")"+"("+cstr(QueryResult.fields("Quality").value)+")"+SerNum+mid(CurrentPath,j,Len(CurrentPath)-j+1)
FolderName=FileNameNew
FbdnSym=Instr(1,FolderName,"/")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"/")
wend
FbdnSym=Instr(1,FolderName,"\")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"\")
wend
FbdnSym=Instr(1,FolderName,"|")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"|")
wend
FbdnSym=Instr(1,FolderName,"?")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"?")
wend
FbdnSym=Instr(1,FolderName,"*")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"*")
wend
FbdnSym=Instr(1,FolderName,":")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+"-"+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,":")
wend
FbdnSym=Instr(1,FolderName,">")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,">")
wend
FbdnSym=Instr(1,FolderName,"<")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"<")
wend
FbdnSym=Instr(1,FolderName,"""")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+"'"+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName,"""")
wend
FbdnSym=Instr(1,FolderName," ")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+"_"+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(1,FolderName," ")
wend
FileNameNew=FolderName
NewPath=NewPath+"\"+FileNameNew
AllPathsNew=AllPathsNew+NewPath
FolderName=AllPathsNew
FbdnSym=Instr(1,FolderName,"'")
While FbdnSym>0
FolderName=Mid(FolderName,1,FbdnSym-1)+"''"+Mid(FolderName,FbdnSym+1,len(FolderName)-FbdnSym)
FbdnSym=Instr(FbdnSym+2,FolderName,"'")
wend
AllPathsNew=FolderName
Cmd.CommandText = "Update films set NewPath='"+AllPathsNew+"' where movienum="+cstr(MovieNum)
Cmd.Execute
if CurrentPath<>NewPath then
if fso.FileExists(CurrentPath) then
set CurrentFile=fso.GetFile(CurrentPath)
CurrentFile.Move NewPath
else
msgbox "Файл "+CurrentPath+" не найден"
end if
END IF
QueryResult.MoveNext
Wend
' msgbox AllPathsNew
Для работы нужен Access. Детали, если и правда кому понадобится напишу, а так... действительно несколько гиморный способ, но рабочий.