Я довольно новичок в VBA Excel и пытаюсь реорганизовать очень большую файловую структуру. По сути, все наше оборудование имеет метку в виде [AZ] [0-9] 0-9] [0-9] [AZ], например, J452G является компрессором. У каждого оборудования есть папка со своим именем (например, «C:\Users\Ron\Documents\J452G» состоит из чертежей, подпапок, excels, pdfs, ..). Проблема заключается в том, что я хотел бы скопировать папки этого оборудования в новый каталог, чтобы все теги оборудования имели папку в одном каталоге (чтобы упростить поиск по алфавиту). Теперь эти папки распределены в древовидной структуре папок с большим количеством подпапок.

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

  1. Извлеките пути к файлам (например, "C:\Users\Ron\Documents\J452G") 'Это мне уже удалось сделать
  2. Найдите шаблон [AZ] [0-9] 0-9] [0-9] [AZ] и скопируйте все файлы и подпапки в новый каталог с названием оборудования.

Результатом должна быть основная папка (например, C:\Users\Ron\Documents), содержащая папку для каждого тега оборудования с соответствующими документами.

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

например, C:\Users\Ron\Documents\Nieuwe map \iets \Drogers \F941E \ скопировать содержимое и подпапки в C:\Users\Ron\Documents\F941E \

Спасибо заранее!

2 ответа2

0

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

Получается, что 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .