Как скопировать файл под разными именами из списка имен?

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

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

NAA
Сообщения: 18
Зарегистрирован: Пт дек 05, 2014 22:40

Как скопировать файл под разными именами из списка имен?

Сообщение NAA »

Имеется файл с определенным содержимым. Нужно размножить его под разными именами на основании имеющегося списка имен. Как это быстро сделать?

Чтобы была понятнее задача, напишу подробнее.
Имеется коллекция фотографий в формате RAW (если уж совсем точно - CR2 от Canon'а). Фотоаппарат не имеет GPS-модуля. А я хочу к фотографиям добавить GPS-координаты. Я знаю, что если я создам файлы в формате XMP с координатами и дам им те же имена, что и CR2-файлы, то RAW-конвертер автоматически подхватит координаты из одноименных XMP-файлов.
Эталонный XMP-файл я создал. Теперь задача: размножить этот файл по папкам с фотографиями. Как получить список CR2-файлов в каждой папке с помощью TC, я знаю. А вот как на основании этого списка файлов размножить свой XMP-файл, я так и не понял.

Если это невозможно сделать через TC, то как можно сделать другим способом?

[mod="Avada"]Перенесено из "Общих вопросов" в "Автоматизацию".[/mod]
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Если всё сводится к задаче
NAA писал(а):размножить этот файл по папкам с фотографиями
, то что мешает использовать опцию "Копировать во все выделенные папки/ссылки целевой панели"?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
NAA
Сообщения: 18
Зарегистрирован: Пт дек 05, 2014 22:40

Сообщение NAA »

Так нужно, чтобы в каждой папке было столько экземпляров этого файла, сколько там есть фотографий, и чтобы каждый экземпляр файла при этом назывался так, как называется каждый файл фотографии. Я же подробно об этом написал...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Тогда это точно не в Общие вопросы.
Речь идёт о базовых именах файлов?
Описывать задачу нужно проще (без лишней шелухи). Что-то вроде: создать в выбранных каталогах копии XMP-файла рядом с CR2-файлами, придав им то же базовое имя.
Теперь я правильно понял?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
NAA
Сообщения: 18
Зарегистрирован: Пт дек 05, 2014 22:40

Сообщение NAA »

Flasher писал(а):создать в выбранных каталогах копии XMP-файла рядом с CR2-файлами, придав им то же базовое имя.
Совершенно верно!
Можно задачу упростить: не в выбранных каталогах, а в текущем каталоге.
И еще уточнение: желательно уметь работать с выделенным подмножеством CR2-файлов в данном каталоге
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

NAA писал(а):Можно задачу упростить
Лень уже упрощать. VBS:

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

'===========================================================
' Cоздать в выбранных каталогах копии файла с базовым именем
' содержащихся внутри файлов указанного расширения

' Параметры: %WL "<Путь к файлу>" <искомое расширение>
' Пример:    %WL "C:\My Folder\File.xmp" cr2
'===========================================================
With WScript.Arguments
  If .Count = 0 Then WScript.Quit
  List = .Item(0) : File = .Item(1) : Ex = .Item(2)
End With : Set ShA = CreateObject("Shell.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
If Not FSO.FileExists(File) Then
  Title = "     Размножение файла в выбранных каталогах"
  MsgBox "Файла " & File & " не существует!" & vbLf &_
  "Укажите верный путь в параметрах!", 48, Title : WScript.Quit
End If : Ext = FSO.GetExtensionName(File)
With FSO.OpenTextFile(List,,,-1)
  Do Until .AtEndOfStream
    Fd = Trim(.ReadLine)
    If Fd <> "" And FSO.FolderExists(Fd) Then
      Set Items = ShA.NameSpace(Fd).Items
      Items.Filter 192, "*." & Ex
      For Each i in Items
        FSO.CopyFile File, Fd & FSO.GetBaseName(i) & "." & Ext, 0
      Next
    End if
  Loop : .Close
End With
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
NAA
Сообщения: 18
Зарегистрирован: Пт дек 05, 2014 22:40

Сообщение NAA »

Что-то у меня не работает. Наверно, что-то не так делаю.
Я сделал так.
Создал файл CopyFiles.vbs. Поместил в него содержимое скрипта.
В Панели инструментов TC добавил кнопочку, в строке «Команда» поместил «d:\!Test\!!!\CopyFiles.vbs»; в строке «Параметры» поместил «? %WL "%P%N" cr2».
Ставлю курсор на исходный XMP-файл, нажимаю созданную кнопочку.
Что-то происходит, но в текущем каталоге ничего не появляется.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

NAA писал(а):? %WL "%P%N" cr2
Зачем тут знак вопроса? %P%N в кавычки не берётся и будет иметь место только в случае расположения выбранных папок в одном каталоге с файлом, поэтому путь к нему лучше указывать прямой. Смысл файл выбирать в панели?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
NAA
Сообщения: 18
Зарегистрирован: Пт дек 05, 2014 22:40

Сообщение NAA »

Flasher писал(а):Зачем тут знак вопроса?
Чтобы проверить, что команда формируется правильная. Поскольку не работало, я его и вставил.
Flasher писал(а):%P%N в кавычки не берётся
Без кавычек тоже не работало.
Flasher писал(а):Смысл его выбирать в панели?
Чтобы можно было использовать XMP-файл с произвольным именем.
Но и с постоянным именем тоже не работает.
Т. е. с такими параметрами: «%WL 1.xmp cr2» тоже не сработало.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

NAA писал(а):Чтобы проверить, что команда формируется правильная.
И что, правильная команда вышла?
NAA писал(а):Без кавычек тоже не работало.
И я пояснил почему.
NAA писал(а):Чтобы можно было использовать XMP-файл с произвольным именем.
Тогда можно в неактивной панели оставлять курсор на этом файле и использовать параметр %T%M.
NAA писал(а):Т. е. с такими параметрами: «%WL 1.xmp cr2» тоже не сработало.
А где тут, собственно, прямой путь? Я вижу только имя. Для чего пример в шапке приводится?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
NAA
Сообщения: 18
Зарегистрирован: Пт дек 05, 2014 22:40

Сообщение NAA »

Flasher писал(а):А где тут, собственно, прямой путь? Я вижу только имя. Для чего пример в шапке приводится?
Так с него и начал...
Не работает ни такая команда: «%WL "d:\!Test\1.xmp" cr2», ни такая: «%WL d:\!Test\1.xmp cr2». Это я уж потом начал экспериментировать...
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Хм. А каталоги-то выделены или нет?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
NAA
Сообщения: 18
Зарегистрирован: Пт дек 05, 2014 22:40

Сообщение NAA »

Flasher писал(а):Хм. А каталоги-то выделены или нет?
А вот это мне в голову не пришло! Я просто был в текущем каталоге.
Если каталог выделен, то работает!

А так, чтобы только в текущем каталоге работало, можно сделать? Это было бы удобнее. Тогда, может быть, можно будет сделать так, чтобы работало только с выделенными файлами в текущем каталоге.

Добавлено спустя 3 минуты:
Flasher писал(а):
NAA писал(а):Чтобы можно было использовать XMP-файл с произвольным именем.
Тогда можно в неактивной панели оставлять курсор на этом файле и использовать параметр %T%M.
Ага, работает!
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

NAA писал(а):А вот это мне в голову не пришло!
Т.е. как? Название скрипта и подтверждённая формулировка задачи об этом не свидетельствует?
NAA писал(а):Если каталог выделен, то работает!
Если он один, то его выделять нет смысла. Поэтому речь и идёт о выбранных папках.
NAA писал(а):Тогда, может быть, можно будет сделать так, чтобы работало только с выделенными файлами в текущем каталоге.
И что это даст?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
NAA
Сообщения: 18
Зарегистрирован: Пт дек 05, 2014 22:40

Сообщение NAA »

Flasher писал(а):
NAA писал(а):А вот это мне в голову не пришло!
Т.е. как? Название скрипта и подтверждённая формулировка задачи об этом не свидетельствует?
Так ведь речь шла о списке файлов :D
Flasher писал(а):
NAA писал(а):Тогда, может быть, можно будет сделать так, чтобы работало только с выделенными файлами в текущем каталоге.
И что это даст?
Обычно в одном каталоге лежат фотографии не одного объекта, а нескольких. И каждый из объектов имеет свои GPS-координаты. Так, как сейчас получилось - нужно во вспомогательный каталог копировать фотографии одного объекта, напускать на этот каталог скрипт, удалять скопированные фотографии, затем копировать фотографии другого объекта, уже с другими координатами, и т. д. А если можно было бы работать с выделением, тогда бы я сначала выделил в текущем каталоге фото одного объекта, напустил скрипт, затем подправил бы файл с координатами, выделил второй объект, снова напустил скрипт, и т. д. - пока все объекты не будут охвачены.
Ответить