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

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

07.07.2019, 17:43. Показов 8728. Ответов 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
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
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
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
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
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
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
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
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
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
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
6997 / 2895 / 555
Регистрация: 19.10.2012
Сообщений: 8,803
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru