Нужен скрипт "поиск+переименование+перенос"
Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik
Нужен скрипт "поиск+переименование+перенос"
Добрый день.
У меня несколько нетривиальная задача.
Есть группа папок типа
1\pic\
2\pic\
3\pic\
4\pic\
В каждой pic\ лежат файлы с одинаковыми именами типа:
0001.jpg
0002.jpg
0003.jpg
0004.jpg
0005.jpg
Нужно все файлы собрать в одной папке, переименовав их дописыванием в начало имени название папки на урвоень выше ([G]).
Ручками это делается так:
Я включаю поиск файлов (*.jpg) → файлы на панель → выделить все → групповое переименование [G]_[N] (файлы теперь называются 1_0001.jpg, 2_0001.jpg и т.п.) → возвращаюсь в корневую папку → снова нахожу *.jpg → выделить все → перенести в C:\temp
(после редактирования файлов всё предстоит проделать в обратном порядке, но это уже вторично)
Можно ли всё это как-то автоматизировать? Может кто встречал скрипт для подобной задачи?
Команды-то сами по себе простые.
1. cm SearchFor - поиск по шаблону *.jpg;*.tif;
2. cm SelectAllFiles - выделить все найденные файлы;
3. cm MultiRenameFiles - переименование по шаблону [G]_[N];
4. cm GotoPreviousDir - вернуться в начальный каталог;
5. cm SearchFor - поиск по шаблону *.jpg;*.tif;
6. cm SelectAllFiles - выделить все найденные файлы;
7. cm MoveOnlv - переместь в c:\temp;
Вот только как всё это в один скрипт превратить?..
У меня несколько нетривиальная задача.
Есть группа папок типа
1\pic\
2\pic\
3\pic\
4\pic\
В каждой pic\ лежат файлы с одинаковыми именами типа:
0001.jpg
0002.jpg
0003.jpg
0004.jpg
0005.jpg
Нужно все файлы собрать в одной папке, переименовав их дописыванием в начало имени название папки на урвоень выше ([G]).
Ручками это делается так:
Я включаю поиск файлов (*.jpg) → файлы на панель → выделить все → групповое переименование [G]_[N] (файлы теперь называются 1_0001.jpg, 2_0001.jpg и т.п.) → возвращаюсь в корневую папку → снова нахожу *.jpg → выделить все → перенести в C:\temp
(после редактирования файлов всё предстоит проделать в обратном порядке, но это уже вторично)
Можно ли всё это как-то автоматизировать? Может кто встречал скрипт для подобной задачи?
Команды-то сами по себе простые.
1. cm SearchFor - поиск по шаблону *.jpg;*.tif;
2. cm SelectAllFiles - выделить все найденные файлы;
3. cm MultiRenameFiles - переименование по шаблону [G]_[N];
4. cm GotoPreviousDir - вернуться в начальный каталог;
5. cm SearchFor - поиск по шаблону *.jpg;*.tif;
6. cm SelectAllFiles - выделить все найденные файлы;
7. cm MoveOnlv - переместь в c:\temp;
Вот только как всё это в один скрипт превратить?..
Petr_Ch
Во-первых, подфорум, куда была сначала помещена эта тема, называется "Написание плагинов для Total Commander". Неужели так сложно было выяснить, что он не имеет к теме вообще никакого отношения?
Во-вторых, на подфоруме по автоматизации, где на самом деле подобные вещи обсуждаются, очень рекомендую посмотреть, как на самом деле принято делать запросы по скриптам. Это касается и попыток расписывать пошаговые действия, недостаточно их себе при этом представляя. Указанная цепочка команд в скрипт превращена быть не может, поскольку в именах и функциях — куча грубых ошибок. Команд вида cm чего-то-там в природе вообще не существует, нужен знак подчёркивания. Команда cm_SearchFor — никакой не "поиск по шаблону" (для которого есть специальная параметризованная команда loadsearch имя_шаблона, читаем справку), а обычное открытие диалога поиска. То же самое с cm_MultiRenameFiles.
На этом пока остановимся. Замечание за нарушение правил форума. Тема, разумеется, переносится. Далее передаю слово специалистам по автоматизации. Им наверняка тоже найдётся что сказать.
Во-первых, подфорум, куда была сначала помещена эта тема, называется "Написание плагинов для Total Commander". Неужели так сложно было выяснить, что он не имеет к теме вообще никакого отношения?
Во-вторых, на подфоруме по автоматизации, где на самом деле подобные вещи обсуждаются, очень рекомендую посмотреть, как на самом деле принято делать запросы по скриптам. Это касается и попыток расписывать пошаговые действия, недостаточно их себе при этом представляя. Указанная цепочка команд в скрипт превращена быть не может, поскольку в именах и функциях — куча грубых ошибок. Команд вида cm чего-то-там в природе вообще не существует, нужен знак подчёркивания. Команда cm_SearchFor — никакой не "поиск по шаблону" (для которого есть специальная параметризованная команда loadsearch имя_шаблона, читаем справку), а обычное открытие диалога поиска. То же самое с cm_MultiRenameFiles.
На этом пока остановимся. Замечание за нарушение правил форума. Тема, разумеется, переносится. Далее передаю слово специалистам по автоматизации. Им наверняка тоже найдётся что сказать.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Не представит себе наши безобразия.
Перечитал внимательней пост, убрал старое..
В общем, суть понятна. Ctrl+B + Ctrl+A + F6 + автопереименование.
Скрипт простой. Слегка переделать один из имеющихся (например, этот).
В общем, суть понятна. Ctrl+B + Ctrl+A + F6 + автопереименование.
Скрипт простой. Слегка переделать один из имеющихся (например, этот).
Последний раз редактировалось Flasher Сб фев 02, 2013 16:31, всего редактировалось 2 раза.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Petr_Ch
В скрипте по приведённой Flasher ссылке нужно убрать функцию NextName - удалить кусок кода
А процедуру MoveFile поменять:
В скрипте по приведённой Flasher ссылке нужно убрать функцию NextName - удалить кусок кода
Код: Выделить всё
Function NextName(pFilePath)
...
End Function
Код: Выделить всё
Sub MoveFile(pFile, pFolder)
Dim lF, lE
lF = "C:\temp\" & FSO.GetParentFolderName(pFolder.Path) & "_" & pFile.Name
lE = LCase(FSO.GetExtensionName(pFile.Path))
If (lE = "jpg") Or (lE = "tif") Then FSO.MoveFile pFile.Path, lF
End Sub
Последний раз редактировалось Batya Вс фев 03, 2013 22:28, всего редактировалось 2 раза.
Нет, я не сплю. Я просто медленно моргаю.
Ты про [P]_[N] в ИГП?Avada писал(а):зачем вообще устраивать такую процедуру вместо редактирования по месту
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Flasher
Нет, не про это. Действия в ИГП — часть некоей цепочки действий. А цель этих действий какова? Я понял так (возможно, неправильно, но уж как написано...), что надо собрать файлы из разных мест во временную папку для какого-то редактирования, а по его завершении раскидать обратно и переименовать назад.
Нет, не про это. Действия в ИГП — часть некоей цепочки действий. А цель этих действий какова? Я понял так (возможно, неправильно, но уж как написано...), что надо собрать файлы из разных мест во временную папку для какого-то редактирования, а по его завершении раскидать обратно и переименовать назад.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Не представит себе наши безобразия.
Avada
Про редактирование только топикстартеру известно. Там могут быть свои тонкости. Если же редактирование может принять автоматическую форму, то, конечно, твоё удивление понятно.
Про редактирование только топикстартеру известно. Там могут быть свои тонкости. Если же редактирование может принять автоматическую форму, то, конечно, твоё удивление понятно.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Извиняюсь. Тут впервые, а на мой дилетанстский взгляд тема "создание плагинов..." от "написание скриптов..." ничем не отличается.Avada писал(а):Petr_Ch
Во-первых, подфорум, куда была сначала помещена эта тема, называется...
Но буду теперь знать.
И сразу отвечаю на вопрос:
Файлы хоть и похожи, но не одинаковы. Весь массив далее делится на 3-5 условных подгрупп, каждая из которых в свою очередь проходит через свой алгоритм обработки в совершенно разных программах.
Согласитесь, делить на 3-5 подпапок каждую папку из тысячи, а потом каждую групку персонально обрабатывать в разных редкаторах - развлечение сомнительное. Вот я и создаю изначально общий массив, дабы колбасить всё это "оптом".
За наводки спасибо.
Сейчас поэкспериментирую.
Avada пишет про то, что оптом колбасить можно и без перемещения в общую папку.Petr_Ch писал(а):Вот я и создаю изначально общий массив, дабы колбасить всё это "оптом".
Не раз писалось, что иногда лучше описать конечную цель, чем выдумывать промежуточную.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Это только на такой взгляд. А тема про написание плагинов даже от общей темы по плагинам отделена. Её целевая аудитория ясно указана:Petr_Ch писал(а):на мой дилетанстский взгляд тема "создание плагинов..." от "написание скриптов..." ничем не отличается.
А насчёт описания конечной цели замечено верно. Не всё, что можно теоретически придумать, именно так и следует делать, могут найтись способы куда проще. Как минимум просмотр файлов без подкаталогов выше уже упоминался.Только для тех, кто пишет плагины под Total Commander. Обмен опытом, решение проблем.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Не представит себе наши безобразия.
Flasher
Все эти переносы как раз и нужны чтобы сосредоточиться на основной цели - обработке, файлов. По обработке у меня нет вопросов. Там как раз моё поле и я в теме.
Путём длительных наблюдений я подсчитал что обработка ускоряется процентов на 30, если файлы собраны в одну кучу.
Так вот, если в плане обработки и разбора файлов я уже давно всё оптимизировал, то эти самые переносы файлов туда-сюда так и остались циклами из множества ручных операций. А ручные операции это всегда риск ошибиться. Ну и вообще трата времени и занудство в чистом виде.
Вот я и хочу автоматизировать самое слабое звено - ручное растаскивание файлов.
Код подправил, но выдает ошибку. Что-то в предпоследней строчке ему не нравится. Хотя, судя по всему, он и начальные команды не выполняет(((
Все эти переносы как раз и нужны чтобы сосредоточиться на основной цели - обработке, файлов. По обработке у меня нет вопросов. Там как раз моё поле и я в теме.
Путём длительных наблюдений я подсчитал что обработка ускоряется процентов на 30, если файлы собраны в одну кучу.
Так вот, если в плане обработки и разбора файлов я уже давно всё оптимизировал, то эти самые переносы файлов туда-сюда так и остались циклами из множества ручных операций. А ручные операции это всегда риск ошибиться. Ну и вообще трата времени и занудство в чистом виде.
Вот я и хочу автоматизировать самое слабое звено - ручное растаскивание файлов.
Код подправил, но выдает ошибку. Что-то в предпоследней строчке ему не нравится. Хотя, судя по всему, он и начальные команды не выполняет(((
Код: Выделить всё
'======================================================================
' Параметры:
' {файл-список}
'
' Пример параметров при вызове из TC:
' %L
'======================================================================
Option Explicit
Dim FSO, FF, F, SF
With WScript
If .Arguments.Count = 0 Then
MsgBox "Не заданы параметры!", vbOKOnly + vbCritical, "Очистка вложенных папок"
.Quit
End If
FF = .Arguments(0)
End With
Set FSO = CreateObject("Scripting.FileSystemObject")
With FSO.OpenTextFile(FF, 1)
Do While Not .AtEndOfStream
F = Trim(.ReadLine)
If F <> "" Then
If FSO.FolderExists(F) Then
For Each SF In FSO.GetFolder(F).SubFolders
On Error Resume Next
MoveFromFolder SF, F
If Err.Number = 0 Then FSO.DeleteFolder SF.Path
Err.Clear
On Error GoTo 0
Next
End If
End If
Loop
.Close
End With
Set FSO = Nothing
WScript.Quit
Sub MoveFromFolder(pSubFolder, pFolder)
Dim lF
For Each lF In pSubFolder.Files
MoveFile lF, pFolder
Next
For Each lF In pSubFolder.SubFolders
MoveFromFolder lF, pFolder
FSO.DeleteFolder lF.Path
Next
End Sub
Sub MoveFile(pFile, pFolder)
Dim lF, lE
lF = "C:\temp\" & FSO.GetParentFolderName(pFolder.Path) & "_" & pFile.Name
lE = LCase(FSO.GetExtensionName(pFile.Path))
If (lE = "jpg") Or (lE = "tif") FSO.MoveFile pFile.Path, lF
End SubТак вот это поле и можно перенести в автоматическое поле без переноса файлов. И не о каких 30% речи идти не будет.Petr_Ch писал(а): По обработке у меня нет вопросов. Там как раз моё поле и я в теме.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Flasher
Поверьте, если я начну расписывать что и как и почему и зачем делается на основном этапе, то это только начнёт плодить всё новые вопросы/предложения, мои ответы в свою очередь породят ещё пачку вопросов... и так далее в геометрической прогрессии. Знаю. Проходил уже.
Здесь я как раз попытался максимально отсеять лишнюю информацию, оставив "надо перенести файлы", дабы избежать дебрей.
Но и на том спасибо. Теперь я хотя бы вижу что задача нетривиальна и с наскоку её не решить.
Отсутствие результата, тоже результат ©
Поверьте, если я начну расписывать что и как и почему и зачем делается на основном этапе, то это только начнёт плодить всё новые вопросы/предложения, мои ответы в свою очередь породят ещё пачку вопросов... и так далее в геометрической прогрессии. Знаю. Проходил уже.
Здесь я как раз попытался максимально отсеять лишнюю информацию, оставив "надо перенести файлы", дабы избежать дебрей.
Но и на том спасибо. Теперь я хотя бы вижу что задача нетривиальна и с наскоку её не решить.
Отсутствие результата, тоже результат ©
Как отмечалось выше, не нужно писать, что делается на каком-то этапе. Нужно писать, что должно быть в конечном итоге. Это и избавит от новых вопросов и предложений.Petr_Ch писал(а):что и как и почему и зачем делается на основном этапе
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.