Страницы: 1
RSS
Переименование файлов с помощью макроса
 
Уважаемые знатоки! Столкнулся с такой проблемой: на листе экселя существует маршрут (перечень адресов). Каждый день бригада проезжает по этому маршруту и делает фотографии на каждом адресе, причем количество может быть разное: как ода фотка, так и 3-4... По приезду эти фотографии скидываются на компьютер, но их имена, конечно же, состоят из цифр и букв, так как предусмотрено производителем фотоаппарата.

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

Зарание спасибо!)
 
IgorKZV, здравия. Возможно либо с помощью FileSystemObject, либо через Dir. (не эксель: либо батник написать, либо программы просмотра изображений поддерживают пакетное переименование)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Как средствами VBA переименовать/переместить/скопировать файл
Пакетное переименование файлов
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
При помощи макроса сделать легко. А также это легко сделать с помощью Total Commander
 
Цитата
TSN написал: с помощью Total Commander
А ещё Far Manager + plugin "Визуальное переименование файлов". :)

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Спасибо, буду гуглить каждый предложенный вариант, если не подойдет ничего, буду обращаться к TSN за более детальной информацией)
 
Доброе время суток
Что то я не очень представляю себе как это
Цитата
При помощи макроса сделать легко.
. Как сопоставить
Цитата
их имена, конечно же, состоят из цифр и букв, так как предусмотрено производителем фотоаппарата.
с
Цитата
которые бы соответствовали бы адресу, на котором их сделали.
? Особенно, как этому может помочь Total Commander? Если перевести его в режим отображения эскизов и по картинке определить адрес (по строению, например,) и затем переименовывать (руками написать адрес), то понятно. Только то же можно сделать и в Explorer.
Если, допустим, фотоаппарат пишет данные GPS, то тут можно воспользоваться Yandex API или подобными и найти ближайшее строение - только будет ли это тот адрес, который изображён на фотографии?
Или я чего то не понимаю, и всё гораздо проще?
 
Андрей VG Все проще. Попробую разъяснить на примере.

Бригада проработала три адреса: Кирова, 6; Ковпака, 17 и Металлургов, 54. На первом адресе бригада сделала 4 фотографии, на втором - 2, на третьем - 6. Когда все эти фотографии (с названиями, состоящими из букв и цифр) скидываются на компьютер, диспетчер имена этих фотографий вручную переименовывает на имена, которые соответствуют адресу, где сделана фотка, то есть:

Кирова 6_001
Кирова 6_002
Кирова 6_003
Кирова 6_004
Ковпака 17_001
Ковпака 17_002
Металлургов 54_001
Металлургов 54_002
Металлургов 54_003
Металлургов 54_004
Металлургов 54_005
Металлургов 54_006

Задача - автоматизировать этот процесс, желательно макросами, потому как сам маршрут находится в книге Excel, то есть адреса для названий файлов берутся с определенных ячеек.

Проблемы:
1. На каждом адресе может быть сколько угодно фотографий, точного количества нет.
2. Переименовать все файлы подряд по очереди не получится, фотки с одного адреса могут идти не по порядку, диспетчер должен указать какие фотки назвать именем Кирова 6, какие Ковпака 17, а какие Металлургов 54.
 
Ну, если данных GPS нет  ;) , то всё равно.
У вас вновь принятый диспетчер (он же макрос). Видит перед собой список файлов, вы говорите - переименуй их по адресам и порядковым номерам, если на адресе было несколько съёмок.
20150823_104657.jpg
20150823_104715.jpg
20150823_104735.jpg
20150823_104913.jpg
20150823_104923.jpg
Первый же вопрос диспетчера - а как я узаню, что 20150823_104657.jpg это адрес Кирова 6? Это по тому что лежат в папке Кирова 6 или как?
Второй вопрос, а как определить по порядок нумерации, если это не в подряд по дате/времени съёмки?
Определять визуально по содержимому?
Позволить общёлкать последовательно файлы и, по завершении, запросить адрес для этих файлов, а порядок общёлкивания считать порядком нумерации?
 
Цитата
Позволить общёлкать последовательно файлы и, по завершении, запросить адрес для этих файлов, а порядок общёлкивания считать порядком нумерации?
Вот вот вот.... как раз это и нужно.... Общелкать фотки и сказать компьютору назвать их именем Кирова, 6. Это как раз то что нужно, как это возможно реализовать в макросе и возможно ли вообще?
 
Тогда, в первом приближении так. Файлы последовательно общёлкивать, удерживая Ctrl (или прочитать про выделение файлов для более продвинутых вариантов).
Код
Public Sub RenameImages()
    Dim FNames As Variant, sAddress As String, i As Long, id As Long
    Dim fso As Object, pFile As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    FNames = Application.GetOpenFilename("Jpeg (*.jpg),*.jpg", Title:="Выберите файл(ы)", MultiSelect:=True)
    If IsArray(FNames) Then
        sAddress = InputBox("Введите адрес фотографий", "Ввод адреса", "Адрес")
        If sAddress <> "" Then
            id = 0
            For i = LBound(FNames) To UBound(FNames)
                id = id + 1
                Set pFile = fso.GetFile(FNames(i))
                pFile.Name = sAddress & Format$(id, "_000") & "." & fso.GetExtensionName(pFile.Name)
            Next
        End If
    ElseIf Not ((LCase$(FNames) = "false") Or (LCase$(FNames) = "ложь")) Then
        sAddress = InputBox("Введите адрес фотографий", "Ввод адреса", "Адрес")
        If sAddress <> "" Then
            Set pFile = fso.GetFile(FNames)
            pFile.Name = sAddress & "." & fso.GetExtensionName(pFile.Name)
        End If
    End If
End Sub

Успехов.
 
Андрей VG Вы гений!!!))) А разрешите еще немного усложнить... Помимо переименования фоток, хотелось бы создавать папку с таким же названием и перемещать их туда. То есть Создать папку Кирова 6 и туда перекинуть все переименованные фотки Кирова. И еще если возможно то адрес писать не вручную в выведенной форме, а выбирать из ячейки... Зарание примногоблагодарен!!!  :)
 
Цитата
IgorKZV написал:
То есть Создать папку Кирова 6 и туда перекинуть все переименованные фотки Кирова. И еще если возможно то адрес писать не вручную в выведенной форме, а выбирать из ячейки.
Ну так приложите и свои усилия, изучите Объект FileSystemObject - там, практически, всё нужное для этого есть и примените. Каркас у вас уже есть.
Успехов на пути освоения программирования.
 
Понял... Еще раз спасибо за каркас, буду бороздить просторы Объект FileSystemObject...  :)
 
Проще для каждого адреса делать папку и помещать туда сколько угодно фотографий. Имя папки запоминать в таблице для сопоставления с адресом.
Для колонки B двойной клик и выбор папки для анализа. В колонке С - список файлов через ","
Изменено: TheBestOfTheBest - 08.09.2015 22:58:17
Неизлечимых болезней нет, есть неизлечимые люди.
 
Ув. Андрей VG еще раз хочу поблагодарить за предоставленный "каркас", я его подправил под конкретные свои потребности, все работает отлично. Но столкнулся с другой проблемой, когда во время переименования файлов в названии попадается знак "/", комп естественно ругается, потому как имя файла в Windows не может содержать подобных знаков. Сразу отмечу, что после моих исправлений имя вводится не вручную, а берется из готового маршрута, отсюда и сложность. Пробовал подправить код таким образом, чтобы при переименовании, в случаи обнаружения знака "/", компьютер изменял его на "_", но уже неделю ломаю голову и никак не могу решить... Заранее благодарен. :)
 
Смотрите в сторону Replace. Можно прямо в справке VBA набрать и посмотреть как это сделать.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Читают тему
Наверх