View previous topic :: View next topic |
Author |
Message |
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Oct 04, 2016 05:06 Post subject: |
|
|
В общем, вот отредактированный вариант (что там по скорости - не знаю, не сравнивал): 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 |
|
|
myscience
Joined: 22 Mar 2016 Posts: 21
|
(Separately) Posted: Tue Oct 04, 2016 15:06 Post subject: |
|
|
http://forum.wincmd.ru/viewpost.php?p=118933
Code: | Сценарий: D:\2\2.vbs
Строка: 30
Символ: 12
Ошибка: Невозможно создание объекта контейнером ActiveX: 'MSUtil.LogQuery'
Код: 800A01AD
Источник: Ошибка выполнения Microsoft VBScript
|
Уточните, пожалуйста, пункт 7, не понял, где это указывать.
Параметры кнопки указал так , пробовал разные варианты.
Файлы распаковал в папку D:\2 туда же положил скрипт и скопировал wscript.exe |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Oct 04, 2016 15:16 Post subject: |
|
|
myscience wrote: | не понял, где это указывать | Что "это"?
Про Код кнопки можно почитать, если кликнуть на нём. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
myscience
Joined: 22 Mar 2016 Posts: 21
|
(Separately) Posted: Tue Oct 04, 2016 15:40 Post subject: |
|
|
Change- Parameters я заполнил, но не знаю, где нужно указывать " путь к скопированному ранее интерпретатору." что имеется ввиду?
Где кликнуть? |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Tue Oct 04, 2016 19:34 Post subject: |
|
|
В коде кнопки всё очевидно. Где путь к wscript.exe (интерпретатор), где к скрипту. Разве нет?
Кликать нужно по фиолетовому тексту со словами "Код кнопки" над самим кодом. Ваш КО.
К тому же замечу, что использование для предлагаемого инструмента одной из корневых папок диска вместо соответсвующих подпапок ТС (скрипты к скриптам, компоненты к компонентам) с указанием переменных среды, как это полагается, выглядит пренебрежительным, особенно в отношении подфорума, где обсуждение сопутствующих инструментов ведётся именно в рамках Total Commander. Зачем тогда вообще заморачиваться, если для стационарного случая приводился установочный модуль?
Одну ошибку в коде допустил при отладке. Исправил. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
myscience
Joined: 22 Mar 2016 Posts: 21
|
(Separately) Posted: Wed Oct 05, 2016 16:26 Post subject: |
|
|
Прошу извинить меня за случившуюся неэтичность. Я только начинаю вникать в устройство скриптов. После инсталлятора исправленный скрипт заработал.
Про код кнопки оставим, видимо у меня древняя версия 5.51 да и не нужно уже после инсталлятора, как я понял.
Можно ли Вас попросить еще несколько модифицировать скрипт. Хотя бы чтобы он мог переименовывать исходные файлы без расширения. Это сложно сделать?
В таблице соответствия хеш файла и через разделитель его имя без расширения.
Исходным именем файла является его хеш, без расширения. По таблице соответствия файл переименовывается.
Было бы совсем хорошо, если бы для файла с произвольным именем рассчитывался мд5 хеш, сравнивался с таблицей соответствия, и в случае их совпадения, файл бы переименовывался.
Но я не знаю, насколько сложно такое написать. Решаю задачу в два этапа: 1) Плагином переименовываю файл в его md5
2) Ваш скрипт (надеюсь, он сможет работать с файлами без расширения) |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Oct 05, 2016 16:54 Post subject: |
|
|
Версия 5.51 - это версия чего?
Код кнопки банален. В поле "Команда:" "путь к wscript.exe" "путь к скрипту.vbs". Чего там непонятно-то? Делается это прежде всего для переменных окружения, в ином случае путь к скрипту можно было бы и первым параметром ставить.
Файлы без расширений скрипт и так переименовывает. Не вижу проблемы.
Вообще очень непредусмотрительно писать о конечной задаче тогда, когда уже работа проделана. Переименование по хэш - это старая песня (как и создание хэш-файлов). И в том случае совсем не требуется файлы ещё и в контрольные суммы переименовывать. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
myscience
Joined: 22 Mar 2016 Posts: 21
|
(Separately) Posted: Wed Oct 05, 2016 17:35 Post subject: |
|
|
Версия ТС
На файлах без расширений почему-то не сработал.
Дайте, пожалуйста, ответ в теме про утилиту, хотя памятку читал, не всё понятно.
Last edited by myscience on Thu Oct 06, 2016 15:39; edited 2 times in total |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10280 Location: Россия, Саратов
|
(Separately) Posted: Wed Oct 05, 2016 17:43 Post subject: |
|
|
myscience
Никакие вопросы по работе версии TC 5.51 на этом форуме не могут обсуждаться в принципе. Вообще никакие. Антиквариату место в музее. Если это действительно так, обновляйтесь. Без этого продолжение разговора теряет всякий смысл. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия.
Last edited by Avada on Fri Oct 07, 2016 12:46; edited 1 time in total |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Oct 05, 2016 18:07 Post subject: |
|
|
myscience
Вдобавок хочу отметить, что соответствующие скрипты обсуждаются по месту их размещения.
И, судя по вопросам, вижу, что с памяткой подфорума, обязательной к прочтению, ознакомления таки не было. А начать стоило бы с этого.
+ Пропуск заглавных букв и отсутствие точек в конце предложений у нас не поощряется. Пишите аккуратней. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
kabatov
Joined: 19 Jan 2019 Posts: 12
|
(Separately) Posted: Thu Feb 14, 2019 02:18 Post subject: |
|
|
Уважаемый 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 |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Feb 14, 2019 05:55 Post subject: |
|
|
kabatov
Прочтите внимательно памятку подфорума. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Apr 07, 2019 14:15 Post subject: |
|
|
Flasher wrote: | Для UTF-8 без LogParser.dll, увы, не обойтись. | Позже выяснилось, что я ошибался. Исправил первый код под UTF-8. Во втором заменил ошибочно указанную точку с запятой на вертикальную черту. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
|
|
|
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
|