如何从文件夹路径中提取模式(VBA Excel)

如何从文件夹路径中提取模式(VBA Excel)

我对 vba excel 还不太熟悉,正在尝试重新组织一个非常大的文件结构。基本上,我们所有的设备都有一个标签,格式为 [AZ][0-9]0-9][0-9][AZ],例如 J452G 是压缩机。每台设备都有一个带有其名称的文件夹(例如“C:\Users\Ron\Documents\J452G”包含图纸、子文件夹、excel、pdf 等)。问题是我想将这些设备文件夹复制到一个新目录中,以便所有设备标签都在一个目录中有一个文件夹(以便于按字母顺序搜索)。现在这些文件夹分布在一个树状文件夹结构中,其中包含许多子文件夹。

我想做的是

  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](如果找到)并将其分配给目标:=

例如 C:\Users\Ron\Documents\Nieuwe map \iets\Drogers\F941E\ 将内容和子文件夹复制到 C:\Users\Ron\Documents\F941E\

提前谢谢了!

答案1

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

答案2

事实证明,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

相关内容