Как извлечь шаблон из пути к папке (VBA Excel)

Я довольно новичок в VBA excel и пытаюсь реорганизовать очень большую файловую структуру. В основном, все наше оборудование имеет бирку в виде [а-z][0-9]0-9][0-9][а-Z], например J452G быть компрессором. У каждого оборудования есть папка с его именем (например, "C:UsersRonDocumentsJ452G" состоят из чертежей, подпапок, excels, PDF-файлов..). Проблема в том, что я хотел бы скопировать эти папки оборудования в новый каталог, чтобы все теги оборудования имели папку в одном каталоге (чтобы сделать алфавитный поиск легко). Теперь эти папки распределены в древовидной структуре папок с большим количеством вложенных папок.

Что я хотел бы сделать, это

  1. извлечь пути к файлам (например, "C:UsersRonDocumentsJ452G") 'это я уже успел сделать
  2. найдите шаблон [a-Z][0-9]0-9][0-9][A-Z] и скопируйте все файлы и вложенные папки в новый каталог с именем оборудования.

результат должен быть главной папкой (например C:UsersRonDocuments) содержит папку для каждого тега оборудования с соответствующими документами.

Я особенно застрял на том, как извлечь шаблон [a-Z][0-9]0-9][0-9][A-Z] из строки, если найдено и присвоение назначения:=

например. C:UsersRonDocumentsNieuwe карта ietsDrogersF941E
копировать содержимое и подпапки вC:UsersRonDocumentsF941E

заранее большое спасибо!

3
задан Glenn
20.12.2022 8:54 Количество просмотров материала 2453
Распечатать страницу

2 ответа

VBA слишком медленно обрабатывает файлы, я думаю, что python был бы лучшим выбором для этого. Вот пример кода, который можно использовать:

import os, re, shutil

rootDir = raw_input("Please enter the search directory: ") #use forward slashes
destDir= raw_input("Please enter the destination directory: ")
directoryList = []

for fold,subFold, f in os.walk(rootDir):
    match = re.search(r'.*[A-Z]\d\d\d[A-Z]', fold) #your pattern
    if match:
        directoryList.append(match.group()) #adds to a list of paths

directoryList = set(directoryList) #eliminate duplicates

for dir in directoryList: 
    #takes the last part as the folder name
    folderName = dir.split('/')[-1] 
    pasteDir = destDir+folderName
    shutil.copytree(dir, pasteDir) #creates the new folder and save files and subfldrs
0
отвечен Ruben 2022-12-21 16:42

получается, VBA может обрабатывать регулярные выражения. Прохладный. кто-то спросил, как в Stack Overflow. Это должно справиться с любыми вашими потребностями. Он даже имеет довольно хорошее объяснение того, как использовать регулярные выражения, если вы незнакомы.

Если вы хотите найти только имя текущей папки / файла для этого шаблона, вот фрагмент, чтобы сократить полный путь до последнего бита (будь то папка или файл):

'Setup. This is probably not necessary for your already established code
Dim fPath As String, fName As String
fPath = "C:\Users\Ron\Documents\Nieuwe map \iets\Drogers\F941E\"

'Remove any trailing slashes
Do Until Right(fPath, 1) <> Application.PathSeparator
    fPath = Left(fPath, Len(fPath) - 1)
Loop

'Extract the last entry
fName = Mid(fPath, InStrRev(fPath, Application.PathSeparator) + 1)

'Print the result (again, probably not necessary for your application)
Debug.Print fName
0
отвечен Engineer Toast 2022-12-21 18:59

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх