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 

Переименование файлов по списку (таблице) соответствий
Goto page Previous  1, 2
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Oct 04, 2016 05:06    Post subject: Reply with quote

В общем, вот отредактированный вариант (что там по скорости - не знаю, не сравнивал):
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).
Установочный модуль, если переноска не нужна.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Wed Oct 05, 2016 01:13; edited 2 times in total
Back to top
View user's profile Send private message
myscience



Joined: 22 Mar 2016
Posts: 21

Post (Separately) Posted: Tue Oct 04, 2016 15:06    Post subject: Reply with quote

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
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Oct 04, 2016 15:16    Post subject: Reply with quote

myscience wrote:
не понял, где это указывать
Что "это"?
Про Код кнопки можно почитать, если кликнуть на нём.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
myscience



Joined: 22 Mar 2016
Posts: 21

Post (Separately) Posted: Tue Oct 04, 2016 15:40    Post subject: Reply with quote

Change- Parameters я заполнил, но не знаю, где нужно указывать " путь к скопированному ранее интерпретатору." что имеется ввиду?
Где кликнуть?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Tue Oct 04, 2016 19:34    Post subject: Reply with quote

В коде кнопки всё очевидно. Где путь к wscript.exe (интерпретатор), где к скрипту. Разве нет?
Кликать нужно по фиолетовому тексту со словами "Код кнопки" над самим кодом. Ваш КО.

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

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



Joined: 22 Mar 2016
Posts: 21

Post (Separately) Posted: Wed Oct 05, 2016 16:26    Post subject: Reply with quote

Прошу извинить меня за случившуюся неэтичность. Я только начинаю вникать в устройство скриптов. После инсталлятора исправленный скрипт заработал.
Про код кнопки оставим, видимо у меня древняя версия 5.51 да и не нужно уже после инсталлятора, как я понял.

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

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

Было бы совсем хорошо, если бы для файла с произвольным именем рассчитывался мд5 хеш, сравнивался с таблицей соответствия, и в случае их совпадения, файл бы переименовывался.
Но я не знаю, насколько сложно такое написать. Решаю задачу в два этапа: 1) Плагином переименовываю файл в его md5
2) Ваш скрипт (надеюсь, он сможет работать с файлами без расширения)
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Oct 05, 2016 16:54    Post subject: Reply with quote

Версия 5.51 - это версия чего? Shocked
Код кнопки банален. В поле "Команда:" "путь к wscript.exe" "путь к скрипту.vbs". Чего там непонятно-то? Делается это прежде всего для переменных окружения, в ином случае путь к скрипту можно было бы и первым параметром ставить.

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

Вообще очень непредусмотрительно писать о конечной задаче тогда, когда уже работа проделана. Переименование по хэш - это старая песня (как и создание хэш-файлов). И в том случае совсем не требуется файлы ещё и в контрольные суммы переименовывать.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
myscience



Joined: 22 Mar 2016
Posts: 21

Post (Separately) Posted: Wed Oct 05, 2016 17:35    Post subject: Reply with quote

Версия ТС Very Happy
На файлах без расширений почему-то не сработал.
Дайте, пожалуйста, ответ в теме про утилиту, хотя памятку читал, не всё понятно.


Last edited by myscience on Thu Oct 06, 2016 15:39; edited 2 times in total
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10236
Location: Россия, Саратов

Post (Separately) Posted: Wed Oct 05, 2016 17:43    Post subject: Reply with quote

myscience
Никакие вопросы по работе версии TC 5.51 на этом форуме не могут обсуждаться в принципе. Вообще никакие. Антиквариату место в музее. Если это действительно так, обновляйтесь. Без этого продолжение разговора теряет всякий смысл.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.


Last edited by Avada on Fri Oct 07, 2016 12:46; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Oct 05, 2016 18:07    Post subject: Reply with quote

myscience
Вдобавок хочу отметить, что соответствующие скрипты обсуждаются по месту их размещения.
И, судя по вопросам, вижу, что с памяткой подфорума, обязательной к прочтению, ознакомления таки не было. А начать стоило бы с этого.

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



Joined: 19 Jan 2019
Posts: 12

Post (Separately) Posted: Thu Feb 14, 2019 02:18    Post subject: Reply with quote

Уважаемый 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.
Спасибо.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Feb 14, 2019 05:55    Post subject: Reply with quote

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



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Apr 07, 2019 14:15    Post subject: Reply with quote

Flasher wrote:
Для UTF-8 без LogParser.dll, увы, не обойтись.
Позже выяснилось, что я ошибался. Исправил первый код под UTF-8. Во втором заменил ошибочно указанную точку с запятой на вертикальную черту.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2
Page 2 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group