Нужен скрипт "поиск+переименование+перенос"

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Petr_Ch
Сообщения: 17
Зарегистрирован: Сб фев 02, 2013 14:40

Сообщение Petr_Ch »

Flasher
Ок. Кратко.

Скрипт 1.
Дано:
C:\temp\11111111111\1\pic\0001.jpg
C:\temp\11111111111\1\pic\0002.jpg
C:\temp\11111111111\1\pic\0003.jpg
C:\temp\11111111111\2\pic\0001.jpg
C:\temp\11111111111\2\pic\0002.jpg
C:\temp\11111111111\2\pic\0003.jpg
C:\temp\11111111111\3\pic\0001.jpg
C:\temp\11111111111\3\pic\0002.jpg
C:\temp\11111111111\3\pic\0003.jpg
C:\temp\11111111111\4\pic\0001.jpg
C:\temp\11111111111\4\pic\0002.jpg
C:\temp\11111111111\4\pic\0003.jpg
Надо получить:
C:\temp\22222222\1_0001.jpg
C:\temp\22222222\1_0002.jpg
C:\temp\22222222\1_0003.jpg
C:\temp\22222222\2_0001.jpg
C:\temp\22222222\2_0002.jpg
C:\temp\22222222\2_0003.jpg
C:\temp\22222222\3_0001.jpg
C:\temp\22222222\3_0002.jpg
C:\temp\22222222\3_0003.jpg
C:\temp\22222222\4_0001.jpg
C:\temp\22222222\4_0002.jpg
C:\temp\22222222\4_0003.jpg

Скрипт 2.
Дано:
C:\temp\22222222\1_0001.jpg
C:\temp\22222222\1_0002.jpg
C:\temp\22222222\1_0003.jpg
C:\temp\22222222\2_0001.jpg
C:\temp\22222222\2_0002.jpg
C:\temp\22222222\2_0003.jpg
C:\temp\22222222\3_0001.jpg
C:\temp\22222222\3_0002.jpg
C:\temp\22222222\3_0003.jpg
C:\temp\22222222\4_0001.jpg
C:\temp\22222222\4_0002.jpg
C:\temp\22222222\4_0003.jpg
Надо получить:
C:\temp\11111111111\1\pic\0001.jpg
C:\temp\11111111111\1\pic\0002.jpg
C:\temp\11111111111\1\pic\0003.jpg
C:\temp\11111111111\2\pic\0001.jpg
C:\temp\11111111111\2\pic\0002.jpg
C:\temp\11111111111\2\pic\0003.jpg
C:\temp\11111111111\3\pic\0001.jpg
C:\temp\11111111111\3\pic\0002.jpg
C:\temp\11111111111\3\pic\0003.jpg
C:\temp\11111111111\4\pic\0001.jpg
C:\temp\11111111111\4\pic\0002.jpg
C:\temp\11111111111\4\pic\0003.jpg

Идеи?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Petr_Ch
Оверквотить и расписывать исходную задачу никто не просил. По ней уже приводилась реализация (по крайней мере в отношении первой части). Если памятка не читалась (как можно видеть), то это не проблема помогающего.
Конечной цели, я так понял, мы так и не увидим.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Petr_Ch
Сообщения: 17
Зарегистрирован: Сб фев 02, 2013 14:40

Сообщение Petr_Ch »

Flasher
Ок. Перефразирую проще.

Имеем некий массив "а". Надо только средствами TC преобразовать его в массив "Б".

Примеры:
Массив "А".
C:\temp\11111111111\1\pic\0001.jpg
C:\temp\11111111111\1\pic\0002.jpg
C:\temp\11111111111\1\pic\0003.jpg
C:\temp\11111111111\2\pic\0001.jpg
C:\temp\11111111111\2\pic\0002.jpg
C:\temp\11111111111\2\pic\0003.jpg
C:\temp\11111111111\3\pic\0001.jpg
C:\temp\11111111111\3\pic\0002.jpg
C:\temp\11111111111\3\pic\0003.jpg
C:\temp\11111111111\4\pic\0001.jpg
C:\temp\11111111111\4\pic\0002.jpg
C:\temp\11111111111\4\pic\0003.jpg

Массив "Б".
C:\temp\22222222\1_0001.jpg
C:\temp\22222222\1_0002.jpg
C:\temp\22222222\1_0003.jpg
C:\temp\22222222\2_0001.jpg
C:\temp\22222222\2_0002.jpg
C:\temp\22222222\2_0003.jpg
C:\temp\22222222\3_0001.jpg
C:\temp\22222222\3_0002.jpg
C:\temp\22222222\3_0003.jpg
C:\temp\22222222\4_0001.jpg
C:\temp\22222222\4_0002.jpg
C:\temp\22222222\4_0003.jpg

Конечная цель - массив "Б". Всё. Точка. Нет третьего дна.
Куда уж проще я не знаю(((
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Ок. Вижу разницу. Появилось дополнительное условие с переименованием одного из родительских каталогов. Средствами ТС так не получится. Только скриптингом.
Теперь самое главное:
Petr_Ch писал(а):после редактирования файлов всё предстоит проделать в обратном порядке
Что понимается под редактированием файлов?

Скрипт, как я уже писал, простой (но идея кидать файлы туда-сюда пока в моей голове не укладывается):

Код: Выделить всё

'===============================================================================
' Перемещение jpg- и tif-файлов из папки ..\№\pic\ в корень выбранной папки
' с переименованием их по шаблону №_имя и последующим удалением пустых подпапок
' Параметры: "<путь к папке>" <имя новой папки>
' Пример:    %V 22222222
'===============================================================================
With WScript.Arguments
  If .Count < 2 Then : MsgBox "Укажите 2 параметра!", 4144 : Wscript.Quit : End if
  Path = .Item(0) : NewName = .Item(1)
End With
Set FSO  = CreateObject("Scripting.FileSystemObject")
Set Folder = FSO.GetFolder(Path) : Folder.Name = NewName
NewPath = Folder.ParentFolder & "" & NewName
For Each Fd In FSO.GetFolder(NewPath).SubFolders
  If IsNumeric(Fd.Name) Then
    For Each Fl In FSO.GetFolder(Fd & "\pic").Files
      Ext = LCase(FSO.GetExtensionName(Fl))
      If Ext = "jpg" Or Ext = "tif" Then Fl.Move NewPath & "" & Fd.Name & "_" & Fl.Name
    Next : If Fd.Size = 0 Then Fd.Delete
  End If
Next : Set FSO = Nothing : Set Folder = Nothing : WScript.Quit
Последний раз редактировалось Flasher Вс фев 03, 2013 00:25, всего редактировалось 3 раза.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Petr_Ch
Ещё раз: оверквотинг запрещён правилами форума. Абсолютно никому не нужное полное цитирование предыдущих постов удалено.
И я хотел бы со своей стороны понять: чем не устраивает редактирование в режиме показа файлов без подкаталогов и зачем вообще все эти переносы? Видимо, в самом деле надо пояснить, что же понимается под редактированием.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Petr_Ch писал(а):Код подправил, но выдает ошибку. Что-то в предпоследней строчке ему не нравится.
Прошу прощения - писал без проверки и ошибся немного. Попустил "Then". Эта строка должна быть:

Код: Выделить всё

  If (lE = "jpg") Or (lE = "tif") Then FSO.MoveFile pFile.Path, lF 
Исправил и соответствующий пост.
Petr_Ch писал(а):Хотя, судя по всему, он и начальные команды не выполняет(((
Ну, это будет видно, когда скрипт отработает без ошибок.
Также не следует забывать, что исходный (и нынешний модифицированный) скрипт работает с выделенными папками.
И ещё - исходный скрипт после переноса удаляет папки. Если этого не требуется, нужно удалить или закомментировать сроку:

Код: Выделить всё

    FSO.DeleteFolder lF.Path 
Нет, я не сплю. Я просто медленно моргаю.
Petr_Ch
Сообщения: 17
Зарегистрирован: Сб фев 02, 2013 14:40

Сообщение Petr_Ch »

Flasher писал(а):Ок. Вижу разницу. Появилось дополнительное условие с переименованием одного из родительских каталогов.
Вы немного нетак меня поняли. Переименовывать или удалять никаких каталогов не надо. И к файлам надо не номера дописывать, а имя папки над папкой "pic".
Avada, извиняюсь за оверквотинг, но явно нужны ещё пояснения.
Путь был:
C:\111111\abrakadabra\pic\0000001.jpg
Путь стал:
D:\temp\abrakadabra_0000001.jpg
Где "D:\temp" даны просто для примера. Это может быть родительский каталог или просто вторая панель. Не важно.

А в целом ваш скрипт сработал, но он файлы ни на дюйм не сдвинул. Просто переименовал исходную папку.
Batya писал(а):Пропустил "Then"...
Подправил скрипт. Запускаю → за долю секунды что-то происходит, но в результате всё остаётся как было.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Petr_Ch писал(а):Переименовывать или удалять никаких каталогов не надо.
Как запрашиваем, так и получаем:
Petr_Ch писал(а):преобразовать его в массив "Б".
Petr_Ch писал(а):но он файлы ни на дюйм не сдвинул.
На какой папке курсор и какие параметры? Если опять нет желания обращаться к памятке с рекомендациями при проблемах, то это не моя вина.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Petr_Ch
Сообщения: 17
Зарегистрирован: Сб фев 02, 2013 14:40

Сообщение Petr_Ch »

Flasher писал(а):На какой папке курсор и какие параметры?
(c:\temp\XXXX\pic\0001.jpg)
Курсор на папках XXXX.
Параметры %V c:\temp "11"
Как и писал ранее скрипт просто переименовывает temp в 11.
Flasher писал(а):Если опять нет желания обращаться к памятке с рекомендациями при проблемах, то это не моя вина.
Что за памятка?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Petr_Ch писал(а):Параметры %V c:\temp "11"
А где в шапке скрипта указано, что параметра 3? c:\temp тут ни к чему вообще. Кавычки для имени (11) без пробелов не требуются, опять же они не указаны.
Petr_Ch писал(а):Что за памятка?
Единственная тема, прикрепленная к подфоруму. Неужели не видно?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Petr_Ch
Сообщения: 17
Зарегистрирован: Сб фев 02, 2013 14:40

Сообщение Petr_Ch »

Flasher писал(а):А где в шапке скрипта указано, что параметра 3?
Но ваш параметр %V 22222222 выдаёт сообщение "укажите два параметра".
В памятке ответов не нашел((

У меня тотал 7.04a.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Petr_Ch
Речь про проблемы, нижняя часть памятки.
Не удивительно, что выдаёт. %V в такой старой версии ТС и в помине не было. Заменить на %P%N.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Petr_Ch писал(а):Подправил скрипт. Запускаю → за долю секунды что-то происходит, но в результате всё остаётся как было.
Выполнено ли следующее?
Batya писал(а):Также не следует забывать, что исходный (и нынешний модифицированный) скрипт работает с выделенными папками.
Из этого примера это папки
C:\temp\11111111111\1
C:\temp\11111111111\2
C:\temp\11111111111\3
C:\temp\11111111111\4
Нет, я не сплю. Я просто медленно моргаю.
Petr_Ch
Сообщения: 17
Зарегистрирован: Сб фев 02, 2013 14:40

Сообщение Petr_Ch »

Flasher
%P%N не помогло.
Обновил версию тотала до 8.1, но скрипт по прежнему всего лишь переименовывает папку, на которой курсор. (независимо от кол-ва выделенных папок).

Версия wscript.exe 5.7.0.18066
WinXP x86

Batya
Выделять пробовал самые разные папки. Не помогает.

Параметр %L
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Petr_Ch
Перейдём к конкретике. Берём указанный в точности тут список. Устанавливаем курсор на папке 11111111111. Жмём такую кнопку:

Код: Выделить всё

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Scripts\MoveImages.vbs
%P%N 22222222
wcmicons.dll,76
Изменить имя каталога и переместить картинки из его структуры в корень
Работает - нет?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Ответить