Переименование файлов по списку (таблице) соответствий
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2  :| |:
Total Commander -> Автоматизация Total Commander

#16:  Author: FlasherLocation: Москва PostPosted: Tue Oct 04, 2016 05:06
    —
В общем, вот отредактированный вариант (что там по скорости - не знаю, не сравнивал):
Code:
'••••••••••••••••••••••••••••••••• VBS •••••••••••••••••••••••••••••••••
' Переименовать файлы активной панели по текстовому списку соответствий,
' где между старым и новым именем стоит один запрещённый в именах символ
'
' Условия: 1) путь запуска пользоват. команды/кнопки должен быть пустым
'          2) список соответствий должен быть сохранён в кодировке UTF-8
'          3) требуется ActiveX-компонент LogParser.dll
'
' Параметры: "<Путь к файлу-списку>" <обработка структуры (нет/да): 0/1>
'•••••••••••••••••••••••••••••••••••••••••••••••••• Автор: Flasher © •••

Option Explicit : Dim A, FSO, WSH, FL, DB, Colum, Delim, LQ, InFmt, i
Const Title = " Переименование файлов по базе соответствий"
Set A = WScript.Arguments : If A.Count < 2 Then _
MsgBox Space(15) & "Укажите 2 параметра!", 48, Title : WScript.Quit
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSH = CreateObject("WScript.Shell")
DB = WSH.ExpandEnvironmentStrings(A(0))
If Not FSO.FileExists(DB) Then MsgBox "Файл-список отсутствует" &_
" по заданному пути:" & vbCr & A(0), 48, Title : WScript.Quit
FL = FSO.OpenTextFile(DB).ReadLine
With New Regexp
  .Pattern = "(.*)([""/*\\\t:|<>?])"
  If .Test(FL) Then
    Colum = .Execute(FL)(0).SubMatches(0)
    Delim = .Execute(FL)(0).SubMatches(1)
    If Delim = vbTab Then Delim = "tab"
  Else  MsgBox "На первой строке списка отсутствует " & _
  "запрещённый символ!", 48, Title : WScript.Quit :End If
End With : Set LQ = CreateObject("MSUtil.LogQuery")
Set InFmt = CreateObject("MSUtil.LogQuery.TSVInputFormat")
With InFmt .iCodepage = 65001 : .headerRow = True
 .iHeaderFile = DB : .iSeparator = Delim End With
FFolder FSO.GetFolder(FSO.GetAbsolutePathName(""))
If i <> "" Then _
WSH.Popup Space(29) & "Файлы переименованы!", 2, Title Else _
WSH.Popup Space(22) & "Файлы не соответствуют списку!", 2, Title

Sub FFolder(Folder)
  Dim F, N, BN, Ext, P
  For Each F in Folder.Files
    With LQ.Execute("SELECT * FROM '" & DB &_
    "' WHERE " & Colum & "='" & F.Name & "'", InFmt)
       N = "" : If Not .atEnd Then N = Trim(.getRecord.getValue(3)) : .close
    End With
    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
  Next : If A(1) = 1 Then _
  For Each F in Folder.SubFolders : FFolder F : Next
End Sub
Logparser.dll с манифестами. Файлы кинуть в одну папку с wscript.exe (можно с его симлинком). Подробнее (достаточно п. 1, 2, 7).
Установочный модуль, если переноска не нужна.


Last edited by Flasher on Wed Oct 05, 2016 01:13; edited 2 times in total

#17:  Author: myscience PostPosted: Tue Oct 04, 2016 15:06
    —
http://forum.wincmd.ru/viewpost.php?p=118933
Code:
Сценарий:   D:\2\2.vbs
Строка:   30
Символ:   12
Ошибка:   Невозможно создание объекта контейнером ActiveX: 'MSUtil.LogQuery'
Код:   800A01AD
Источник:    Ошибка выполнения Microsoft VBScript

Уточните, пожалуйста, пункт 7, не понял, где это указывать.
Параметры кнопки указал так
Code:
"D:\1.csv" 1
, пробовал разные варианты.
Файлы распаковал в папку D:\2 туда же положил скрипт и скопировал wscript.exe

#18:  Author: FlasherLocation: Москва PostPosted: Tue Oct 04, 2016 15:16
    —
myscience wrote:
не понял, где это указывать
Что "это"?
Про Код кнопки можно почитать, если кликнуть на нём.

#19:  Author: myscience PostPosted: Tue Oct 04, 2016 15:40
    —
Change- Parameters я заполнил, но не знаю, где нужно указывать " путь к скопированному ранее интерпретатору." что имеется ввиду?
Где кликнуть?

#20:  Author: FlasherLocation: Москва PostPosted: Tue Oct 04, 2016 19:34
    —
В коде кнопки всё очевидно. Где путь к wscript.exe (интерпретатор), где к скрипту. Разве нет?
Кликать нужно по фиолетовому тексту со словами "Код кнопки" над самим кодом. Ваш КО.

К тому же замечу, что использование для предлагаемого инструмента одной из корневых папок диска вместо соответсвующих подпапок ТС (скрипты к скриптам, компоненты к компонентам) с указанием переменных среды, как это полагается, выглядит пренебрежительным, особенно в отношении подфорума, где обсуждение сопутствующих инструментов ведётся именно в рамках Total Commander. Зачем тогда вообще заморачиваться, если для стационарного случая приводился установочный модуль?

Одну ошибку в коде допустил при отладке. Исправил.

#21:  Author: myscience PostPosted: Wed Oct 05, 2016 16:26
    —
Прошу извинить меня за случившуюся неэтичность. Я только начинаю вникать в устройство скриптов. После инсталлятора исправленный скрипт заработал.
Про код кнопки оставим, видимо у меня древняя версия 5.51 да и не нужно уже после инсталлятора, как я понял.

Можно ли Вас попросить еще несколько модифицировать скрипт. Хотя бы чтобы он мог переименовывать исходные файлы без расширения. Это сложно сделать?
В таблице соответствия хеш файла и через разделитель его имя без расширения.

Исходным именем файла является его хеш, без расширения. По таблице соответствия файл переименовывается.

Было бы совсем хорошо, если бы для файла с произвольным именем рассчитывался мд5 хеш, сравнивался с таблицей соответствия, и в случае их совпадения, файл бы переименовывался.
Но я не знаю, насколько сложно такое написать. Решаю задачу в два этапа: 1) Плагином переименовываю файл в его md5
2) Ваш скрипт (надеюсь, он сможет работать с файлами без расширения)

#22:  Author: FlasherLocation: Москва PostPosted: Wed Oct 05, 2016 16:54
    —
Версия 5.51 - это версия чего? Shocked
Код кнопки банален. В поле "Команда:" "путь к wscript.exe" "путь к скрипту.vbs". Чего там непонятно-то? Делается это прежде всего для переменных окружения, в ином случае путь к скрипту можно было бы и первым параметром ставить.

Файлы без расширений скрипт и так переименовывает. Не вижу проблемы.

Вообще очень непредусмотрительно писать о конечной задаче тогда, когда уже работа проделана. Переименование по хэш - это старая песня (как и создание хэш-файлов). И в том случае совсем не требуется файлы ещё и в контрольные суммы переименовывать.

#23:  Author: myscience PostPosted: Wed Oct 05, 2016 17:35
    —
Версия ТС Very Happy
На файлах без расширений почему-то не сработал.
Дайте, пожалуйста, ответ в теме про утилиту, хотя памятку читал, не всё понятно.


Last edited by myscience on Thu Oct 06, 2016 15:39; edited 2 times in total

#24:  Author: AvadaLocation: Россия, Саратов PostPosted: Wed Oct 05, 2016 17:43
    —
myscience
Никакие вопросы по работе версии TC 5.51 на этом форуме не могут обсуждаться в принципе. Вообще никакие. Антиквариату место в музее. Если это действительно так, обновляйтесь. Без этого продолжение разговора теряет всякий смысл.


Last edited by Avada on Fri Oct 07, 2016 12:46; edited 1 time in total

#25:  Author: FlasherLocation: Москва PostPosted: Wed Oct 05, 2016 18:07
    —
myscience
Вдобавок хочу отметить, что соответствующие скрипты обсуждаются по месту их размещения.
И, судя по вопросам, вижу, что с памяткой подфорума, обязательной к прочтению, ознакомления таки не было. А начать стоило бы с этого.

+ Пропуск заглавных букв и отсутствие точек в конце предложений у нас не поощряется. Пишите аккуратней.

#26:  Author: kabatov PostPosted: Thu Feb 14, 2019 02:18
    —
Уважаемый Flasher.

Вас не затруднит ненадолго вернуться к данному скрипту переименования по списку? Я стал использовать его в работе, но в его поведении обнаружилась странность, даже две:
– первый в списке файл всегда остается не переименованным,
– при наличии в именах пробелов появляется следующая ошибка:
Quote:
Строка: 42
Символ: 5
Ошибка: Error parsing query: Syntax Error: <term2>:
'file-01.tif='new' is not a valid operator [Недопустимый или не неподдерживаемый синтаксис запроса SQL.]
Код: 8007064F
Источник: ClLogQueryClass

Переименовывал файлы вида new file-01.tif.
Спасибо.

#27:  Author: FlasherLocation: Москва PostPosted: Thu Feb 14, 2019 05:55
    —
kabatov
Прочтите внимательно памятку подфорума.

#28:  Author: FlasherLocation: Москва PostPosted: Sun Apr 07, 2019 14:15
    —
Flasher wrote:
Для UTF-8 без LogParser.dll, увы, не обойтись.
Позже выяснилось, что я ошибался. Исправил первый код под UTF-8. Во втором заменил ошибочно указанную точку с запятой на вертикальную черту.



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2  :| |:
Page 2 of 2

Powered by phpBB © 2001, 2005 phpBB Group