Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/40: Рейтинг темы: голосов - 40, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 111

Переименовать файлы в разных папках

07.07.2019, 17:43. Показов 8937. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый вечер. Нужно переименовать файлы находящиеся в разных папках
имя Путь
a12.docx D:\переименовать файлы\1а12\
f12.docx D:\переименовать файлы\12\
и11.docx D:\переименовать файлы\11s\

в любые другие имена например:
имя Путь
11a12.docx D:\переименовать файлы\1а12\
23f12.docx D:\переименовать файлы\12\
44и11.docx D:\переименовать файлы\11s\

Не подскажите макрос в VBA для excel?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.07.2019, 17:43
Ответы с готовыми решениями:

Переименовать файлы в папках
Добрый день! Дано: папка foto, в ней неограниченное число папок с названиями по принципу "052-01", "052-02" и т.д. В...

Переименовать, переместить файлы в папках
Здравствуйте, прошу помощи в решении проблемы. Исходные данные: папка с фотографиями, в ней много других папок вида ID (цифры от 1...

Переименовать рекурсивно файлы в папках
Добрый день очень нужна помощь. Есть основная папка в которой множество других папок. а этих папках папки вида "ХХХХХ_НАЗВАНИЕ...

24
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
07.07.2019, 18:50
Strashnoslav, не полениться и набрать в поисковике rename ВБА. Одна из тысяч ссылок http://yandex.ru/clck/jsredir?... ime=144249
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 111
07.07.2019, 20:31  [ТС]
Искал но удобного для работы не нашел.
Вот например из ссылки
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub Rename_File()
    Dim sFileName As String, sNewFileName As String
 
    sFileName = "C:\WWW.xls"    'имя исходного файла
    sNewFileName = "C:\WWW1.xls"    'имя файла для переименования
    If Dir(sFileName, 16) = "" Then MsgBox "Нет такого файла", vbCritical, "Ошибка": Exit Sub
 
    Name sFileName As sNewFileName 'переименовываем файл
 
    MsgBox "Файл переименован", vbInformation, "www.excel-vba.ru"
End Sub
Как можно здесь переименовать, имея список с именами и адресами и новый в который необходимо переименовать?
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
08.07.2019, 06:54
Strashnoslav, составить массив исходных имен, либо записать их , например, в первый столбец листа, во второй соответствующие новые имена. а потом цикл по этим ячейкам. На основе того, что вы прочитали это можно записать так
Visual Basic
1
2
3
4
5
6
Last = cells(Rows.Count,1).End(xlUp).Row
For I = 1 to Last
  sFileName = Cells(I,1)
  sNewFileName = Cells(I,2)
  Name sFileName As sNewFileName 'переименовываем файл
Next
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 111
22.02.2020, 15:26  [ТС]
Доброго времени суток. Не подскажите как с помощью подобного макроса
Visual Basic
1
2
3
4
5
6
7
8
Sub tt()
Last = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To Last
  sFileName = Cells(i, 1)
  sNewFileName = Cells(i, 2)
    FileCopy sFileName, sNewFileName 
    Next
End Sub
скопировать исходные имена файлов с со своими каталогами, в другой каталог при этом создать исходные каталоги где находились файлы.
Вложения
Тип файла: xlsx пример.xlsx (10.2 Кб, 9 просмотров)
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.02.2020, 16:29
Добавьте перед копированием строку
MakeSureDirectoryPathExists sNewFileName
(может быть будет мешать имя файла, тогда его нужно отрезать, я не проверял и не помню)
а в модуль
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
22.02.2020, 17:19
Strashnoslav, например так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub proba()
[A1] = "d:\Evgeny\chance.xlsm" 'на примере папок моего компа
Last = Cells(Rows.Count, 1).End(xlUp).Row
For I = 1 To Last
  Call CopyFile(Cells(I, 1), "d:\TMP")
Next
End Sub
 
Sub CopyFile(ByVal Source As String, ByVal NewDir As String)
Dim Sold As String, Snew As String, I As Integer, Last As Integer, Nd As String
Snew = NewDir & "\" & Mid(Source, 4)
Nd = Left(Snew, InStrRev(Snew, "\"))
If Dir(Nd, vbDirectory) = "" Then MkDir Nd
'MsgBox Source & "  " & Snew
FileCopy Source, Destination:=Snew
End Sub
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.02.2020, 17:47
MkDir насколько помню создаёт не дерево, а только один каталог. MakeSureDirectoryPathExists создаёт сразу дерево. Кстати если вдруг в именах нужна диакритика - тоже есть решение, используйте SHCreateDirectoryExW
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
22.02.2020, 20:14
А можно ещё почесать левое ухо правой рукой через голову (Hugo121, конечно, прав)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub CopyFile(ByVal Source As String, ByVal NewDir As String)
Dim Snew As String, Last As Integer, K, Nd As String
K = 4: Snew = NewDir & Mid(Source, InStrRev(Source, "\") + 1)
Do
  K = InStr(K + 1, Snew, "\")
  If K = 0 Then Exit Do
  Nd = Left(Snew, K)
'  MsgBox "k=" & K & "  " & Nd
  If Dir(Nd, vbDirectory) = "" Then MkDir Nd
Loop
FileCopy Source, Destination:=Snew
End Sub
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 111
22.02.2020, 22:11  [ТС]
Hugo121, не выходит, пробовал
Visual Basic
1
2
3
4
5
6
7
8
9
Sub tt()
Last = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To Last
  sFileName = Cells(i, 1)
  sNewFileName = Cells(i, 2)
  MakeSureDirectoryPathExists sNewFileName
    FileCopy sFileName, sNewFileName 'копируем файл
Next
End Sub
Затем обрезал тоже не выходит, может что не так делаю
Вложения
Тип файла: rar пример.rar (12.0 Кб, 16 просмотров)
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 111
22.02.2020, 22:26  [ТС]
Burk, что-то не разберусь с вашем макросом
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub CopyFile(ByVal Source As String, ByVal NewDir As String)
Dim Snew As String, Last As Integer, K, Nd As String
K = 4: Snew = NewDir & Mid(Source, InStrRev(Source, "") + 1)
Do
  K = InStr(K + 1, Snew, "")
  If K = 0 Then Exit Do
  Nd = Left(Snew, K)
'  MsgBox "k=" & K & "  " & Nd
  If Dir(Nd, vbDirectory) = "" Then MkDir Nd
Loop
FileCopy Source, Destination:=Snew
End Sub
Добавлено через 6 минут
По идее мне нужен макрос который создаст дерево каталогов, а затем уже не трудно туда закинуть файлы
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.02.2020, 22:30
Цитата Сообщение от Hugo121 Посмотреть сообщение
а в модуль
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long
- почему остановились на третьей строке? Или второй? Или четвёртой?

Добавлено через 1 минуту
Да, это для Экселя х32

Добавлено через 1 минуту
Проверил - имя файла не мешает.
0
1847 / 1162 / 354
Регистрация: 11.07.2014
Сообщений: 4,107
23.02.2020, 01:08
Strashnoslav, это не макрос, а процедура с параметрами или вы их не различаете? Пример макроса запуска мой макрос proba. Просто ту процедуру CopyFile из первого моего сообщения надо заменить на CopyFile их второго сообщения.
Создаются деревья каталогов, если их нет, и тут же копируются туда файлы, получаемые с листа экселя. Надо их занести в столбик подряд на лист. Но я думаю, что у Hugo121 проще. И не надо копировать мои макросы в своё сообщение, тем более, что вы неправильно их оформляете. надо выделить код и нажать на VB в меню, читайте правила

Добавлено через 12 минут
пример ссылки на файл, который нужно копировать. Записать в ячейку А1 такую, например, строку d:\Papka1\Papka2\имя файла с расширением. В ячейку листа А2 и т.д. аналогично. Вы ведь так и хотели.
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 111
23.02.2020, 09:39  [ТС]
Hugo121, а можете скинуть рабочий вариант, буду очень благодарен
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
23.02.2020, 14:39
Лучший ответ Сообщение было отмечено Strashnoslav как решение

Решение

Да в тот же добавить просто в модуль (тот или другой, не важно) первой строкой эту указанную строку и всё работает.

Добавлено через 11 минут
В тот что в пример.rar
1
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 111
23.02.2020, 19:11  [ТС]
Спасибо. Модуль добавлял, но почему-то не выполнялось, сейчас заново все вставил и заработало. Всех мужчин с праздником!!!!
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 111
04.03.2020, 23:01  [ТС]
Всем доброго времени суток. Не подскажите как игнорировать повторяющиеся строки имен при переименовании
Visual Basic
1
2
3
4
5
6
7
8
Sub tt()
Last = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To Last
  sFileName = Cells(i, 1)
  sNewFileName = Cells(i, 2)
  Name sFileName As sNewFileName 
Next
End Sub
Добавлено через 19 минут
Например
e:\123\1\11\1.docx e:\123\1\11\11.docx
e:\123\1\11\1.docx e:\123\1\11\12.docx
пропускал повторяющуюся строчку исходного имени, даже если новое имя другое
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
05.03.2020, 01:46
Думаю самое правильное - такого не допускать, если это не нужно. Потому что в принципе это вполне возможно что нужны дубли файлов в разных каталогах.
Но если уж есть - можно например сперва удалить дубликаты по этому столбцу.
Или если вот прямо тут в коде - привлечь коллекцию (с ключами) или словарь. Проще код на словаре. Если повтор sFileName - пропускаем.
0
0 / 0 / 0
Регистрация: 10.03.2019
Сообщений: 111
06.04.2021, 15:54  [ТС]
Доброго времени суток. Не подскажите, как сделать чтобы при несовпадении полного исходного имени, переходил к следующей строке:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long
Sub tt()
Last = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To Last
  sFileName = Cells(i, 1)
  sNewFileName = Cells(i, 2)
  MakeSureDirectoryPathExists sNewFileName
    FileCopy sFileName, sNewFileName 'копируем файл
Next
End Sub
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
10.04.2021, 22:00
Цитата Сообщение от Strashnoslav Посмотреть сообщение
при несовпадении полного исходного имени
- с чем?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.04.2021, 22:00
Помогаю со студенческими работами здесь

Переименовать файлы в папках по имени папки
Здравствуйте. Нужна помощь... Есть много папок , в каждой папке лежит картинка ( произвольное_имя_файла.bmp ) Нужно переименовать...

Переименовать файлы в папках по имени папки
Добрый день, помогите батником Есть много папок, в каждой папке лежат фото в .jpg с абсолютно разными названиями, количество...

Как переименовать файлы во вложенных папках данной папки?
Имеется папка, внутри неё папки с целочисленными названиями. Непонятны 2 момента. 1. ошибка на данной строке, когда я пытаюсь войти во...

Найти файл лога в папках пользователя, переименовать и переместить его в другую папку
Здравствуйте, помогите пожалуйста с задачей, с которой не так давно столкнулся. Настроен лог действий пользователей 1С, который хранится...

Две таблицы dBase в разных папках
Как в выражении SQL (ODBC: Provider=MSDASQL.1;Data Source=Файлы dBASE) упомянуть после FROM две таблицы dBase, которые находятся в разных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru