Скрипты и программы
Скрипт VBA для пакетного переименования файлов по маске, заданной в листе Excel:
Скачать "File Renamer" в формате Excel xlsm
Function renameFiles() 'Функция переименования файлов в текущем каталоге On Error GoTo ErrHandler: ' Действие при появлении ошибки (взамен стандартного сообщения об ошибке) Dim folderPath As String ' Абсолютный Путь до каталога в котором расположен этот файл Excel Dim filePath As String ' Абсолютный Путь до этого файла Excel, вместе с именем самого файла Dim projectCode As String ' Шифр проекта, который будет использован в именах файлов Dim oldProjectCode As String ' Предыдущий шифр проекта (сохраняетсяв в таблице файла Excel после каждого переименования) Dim fileName As String ' Имя существующего файла в текущем каталоге (преобразованое в строковой вид) Dim newFileName As String ' Новое имя файла (собранное из нового шифра проекта и части старого имени файла) Dim tempFileName As String ' Часть имен файлов-шаблонов, которая будет заменятся ' Возможные расширения файлов подлежащих переименованию Dim fileExtension1 As String Dim fileExtension2 As String Dim fileExtension3 As String ' Объекты для работы с файловой системой: Dim oFolder As Object Dim oFile As Object Dim oFSO As Object ' Определение переменных: folderPath = Application.ActiveWorkbook.Path ' Получить полный путь каталога filePath = Application.ActiveWorkbook.FullName ' Получить полный путь файла projectCode = Range(ConfigForm1.projectCode_cell.Value).Value ' Получить шифр проекта из заданной ячейки таблицы oldProjectCode = Range(ConfigForm1.oldProjectCode_cell.Value).Value ' Получить предыдущий шифр проекта из заданной ячейки таблицы tempFileName = Range(ConfigForm1.tempFileName_cell.Value).Value ' Получить заменяемую часть для файлов-шаблонов из заданной ячейки таблицы ' Возможные расширения файлов подлежащих переименованию (выбираются из ячеек таблицы) fileExtension1 = Range(ConfigForm1.fileExtension1_cell.Value).Value fileExtension2 = Range(ConfigForm1.fileExtension2_cell.Value).Value fileExtension3 = Range(ConfigForm1.fileExtension3_cell.Value).Value Set oFSO = CreateObject("Scripting.FileSystemObject") ' Создание объекта файловой системы Set oFolder = oFSO.GetFolder(folderPath) ' Получение доступа к целевому каталогу (текущий каталог) ' Начало основного Цикла перебора имен всех файлов в целевом каталоге: For Each oFile In oFolder.Files fileName = CStr(oFile.Name) ' Преобразование типа данных "Объект (имяФайла) -> Строка (имя файла)" If Not fileName Like oldProjectCode & "*" Then ' Если имя файла не соответствует старому (предыдущему) шифру проекта ' Если имя файла имеет одно из указанных расширений (или содержит часть указанного расширения. Например *.doc[x, m]) If fileName Like "*." + fileExtension1 + "*" Or fileName Like "*." + fileExtension2 + "*" Or fileName Like "*." + fileExtension3 + "*" Then ' Если в имени файла содержится строка указанная в ячейке (например для файлов-шаблонов "НОМЕР-МАРКА") If fileName Like tempFileName & "*" Then ' Сборка нового имени файла (замена "НОМЕР-МАРКА" на новый ШифрПроекта) newFileName = Replace(fileName, tempFileName, projectCode) oFile.Name = newFileName ' Переименование реального файла End If End If End If ' Если имя файла содержит старый (предыдущий) шифр проекта И заданный ШифрПроекта НЕравен старому ШифруПроекта If fileName Like oldProjectCode + ".*" And projectCode <> oldProjectCode Then ' Сборка нового имени файла (замена старого ШифраПроекта на новый ШифрПроекта) newFileName = Replace(fileName, oldProjectCode, projectCode) oFile.Name = newFileName ' Переименование реального файла End If ' Окно Взамен стандартного сообщения об ошибке ErrHandler: If Err.Number = 58 Then ' Если Код ошибки 58 "файл с таким именем уже существует в целевом каталоге" то ' Вывод окна с Сообщением об ошибке MsgBox "Файл с именем:" & vbNewLine & "'" + newFileName + "'" + vbNewLine & "уже существует в текущем каталоге:" & vbNewLine & folderPath, vbCritical End If Resume Next ' После квитирования сообщения выполнять код далее ' MsgBox "---" Next ' Следующий проход по циклу (пока в целевом каталоге есть еще не обработанные файлы) Range(ConfigForm1.oldProjectCode_cell.Value).Value = projectCode ' Запись в ячейку со СтарымШифромПроекта значения НовогоШифраПроекта ' Вывод окна с Сообщением об успешном переименовании файлов MsgBox "Полный путь каталога: " & vbNewLine & " " & vbNewLine & folderPath & vbNewLine & " " & vbNewLine & "Файлы в текущем каталоге переименованы успешно", vbInformation + vbOKOnly End Function