Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Переименование файлов по списку (таблице) соответствий 
Author Message
Flasher



PostPosted: Tue Mar 22, 2016 22:58    Post subject: Reply with quote

myscience
1) Формат файла таблицы какой?
2) Юникод в именах есть или всё обыкновенно?
3) Имена файлов базовые или полные? Без путей?
4) Файлы в корне активной папки или во всей её структуре?
5) Если с присваеваемым именем файл уже существует, добавлять к имени счётчик или пропускать?
_________________________________________________
Ладно, ТпС убёг. Покажу, как думаю. Может, кому пригодится.
Code:
'••••••••••••••••••••••••••••••••• VBS •••••••••••••••••••••••••••••••••
' Переименовать файлы активной панели по текстовому списку соответствий,
' где между старым и новым именем стоит один запрещённый в именах символ
'
' Условия:   путь запуска пользоват. команды/кнопки должен быть пустым;
'            список соответствий должен быть сохранён в кодировке UTF-8
'
' Параметры: "<Путь к файлу-списку>" <обработка структуры (нет/да): 0/1>
'•••••••••••••••••••••••••••••••••••••••••••••••••• Автор: Flasher © •••

Option Explicit : Dim A, Key, FSO, Con, RcS, _
WSS, FL, DB, Delim, Val, Var, Exs, Ext, T, C, i
Const Title = " Переименование файлов по базе соответствий      "
Set A = WSH.Arguments : If A.Count < 2 Then _
MsgBox Space(15) & "Укажите 2 параметра!", 48, Title : WSH.Quit
Key = "HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\Text\Format"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set RcS = CreateObject("ADODB.Recordset")
Set WSS = CreateObject("WScript.Shell")
DB = WSS.ExpandEnvironmentStrings(A(0))
If Not FSO.FileExists(DB) Then MsgBox "Файл-список отсутствует" &_
" по заданному пути:" & vbCr & A(0), 4144, Title : WScript.Quit
FL = FSO.OpenTextFile(DB).ReadLine
With New Regexp
  .Pattern = "[""/*\\\t:|<>?]"
  If .Test(FL) Then
    Delim = .Execute(FL).Item(0).Value : If Delim = vbTab Then _
    Delim = "TabDelimited" Else Delim = "Delimited(" & Delim & ")"
  Else  MsgBox "На первой строке списка отсутствует" &_
  " запрещённый символ!", 4144, Title: WSH.Quit: End If
End With : Val = WSS.RegRead(Key)
If Val <> Delim Then T = 1 : WSS.RegWrite Key, Delim, "REG_SZ"
Exs = FSO.GetParentFolderName(Key) & "\DisabledExtensions"
Ext = FSO.GetExtensionName(DB) : Var = WSS.RegRead(Exs)
If InStrRev(Var & ",", Ext & ",") = 0 Then _
C = 1 : WSS.RegWrite Exs, Var & "," & Ext, "REG_SZ"
RcS.Open "SELECT * FROM " & FSO.GetFileName(DB), "Provider=Microsoft.Jet." &_
"OLEDB.4.0;Data Source='" & FSO.GetParentFolderName(DB) &_
"';Extended Properties='text;CharacterSet=65001;HDR=No'"
FFolder FSO.GetFolder(FSO.GetAbsolutePathName(""))
RcS.Close : If i <> "" Then _
WSS.Popup Space(17) & "Файлы переименованы!", 2, Title, 4160 Else _
WSS.Popup "         Файлы не соответствуют списку!", 2, Title, 4144
If T Then WSS.RegWrite Key, Val, "REG_SZ"
If C Then WSS.RegWrite Exs, Var, "REG_SZ"

Sub FFolder(Folder)
  Dim F, N, BN, P
  For Each F in Folder.Files
    RcS.Filter = "[" & RcS.Fields(0).Name & "] = '" & F.Name & "'"
    If Not RcS.BOF Then
      N = Trim(RcS.Fields(1).Value)
      If N <> "" Then
        BN = FSO.GetBaseName(N) : Ext = FSO.GetExtensionName(N)
        i = 0 : P = Folder & "\" : If Ext <> "" Then Ext = "." & Ext
        While FSO.FileExists(P & N) Or FSO.FolderExists(P & N)
          i = i + 1 : N = BN & " (" & i & ")" & Ext
        Wend : F.Name = N
      End If
    End If
  Next : If A(1) = 1 Then _
  For Each F in Folder.SubFolders : FFolder F : Next
End Sub

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group