Сортировка имен файлов по условиям

Я хочу создать небольшой фрагмент кода, который сохраняет файл в папку (PDF / DWG) и перемещает все мои файлы с меньшей версией #5, чем текущий файл, сохраняемый в замененную папку.

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

У меня есть функция сохранения отсортирована, я просто не знаю, должны были начать с подачи части.

Примеры имен файлов:

Pdf / TE1801_200-01_ {имя}_#5.pdf
Dwg/TE1801_200-01_{имя}_#5.DWG

2 ответа

Решение

' ------------------------------------------------------------------------------
' MOVE OLD REVISION TO SUPERSEDED FOLDERS - PDF
' ------------------------------------------------------------------------------

  
  
URLPASS = Filepath & "PDF\"
      

      
Dim MyObj As Object, MySource As Object, file As Variant
      
Set MyObject = CreateObject("Scripting.FileSystemObject")
Set MySource = MyObject.GetFolder(URLPASS)
        For Each file_ In MySource.Files



LArray = Split(file_, "#")


checkfile = LArray(0)


REV = Split(LArray(1), ".")


If LArray(0) = checkfile And REV(0) < VERSION Then



' FILE FORMATING
' ----------------------------------------


RECON = Split(file_, "PDF\")

    file_ = RECON(1)

RECON = Split(file_, ".")

    DRAWNOCONFIG = RECON(0)
    
  
' MOVE TO NEW LOCATION
' ----------------------------------------
  
  
If Dir(Filepath & "PDF" & "\SUPERSEDED", vbDirectory) = "" Then '
MkDir Filepath & "PDF" & "\SUPERSEDED"
End If
  
  
Name Filepath & "PDF\" & DRAWNOCONFIG & ".pdf" As Filepath & "PDF\" & "SUPERSEDED\" & DRAWNOCONFIG & ".pdf"




Else
'DO NOTHING
GoTo Endline
End If


Endline:


   Next file_


' ------------------------------------------------------------------------------
' MOVE OLD REVISION TO SUPERSEDED FOLDERS - DWG
' ------------------------------------------------------------------------------


URLPASS = Filepath & "DWG\"
      

      

      
Set MyObject = CreateObject("Scripting.FileSystemObject")
Set MySource = MyObject.GetFolder(URLPASS)
        For Each file_ In MySource.Files



LArray = Split(file_, "#")


checkfile = LArray(0)


REV = Split(LArray(1), ".")


If LArray(0) = checkfile And REV(0) < VERSION Then



' FILE FORMATING
' ----------------------------------------


RECON = Split(file_, "DWG\")

    file_ = RECON(1)

RECON = Split(file_, ".")

    DRAWNOCONFIG = RECON(0)
    
  
' MOVE TO NEW LOCATION
' ----------------------------------------
  
  
If Dir(Filepath & "DWG" & "\SUPERSEDED", vbDirectory) = "" Then '
MkDir Filepath & "DWG" & "\SUPERSEDED"
End If
  
  
Name Filepath & "DWG\" & DRAWNOCONFIG & ".dwg" As Filepath & "DWG\" & "SUPERSEDED\" & DRAWNOCONFIG & ".dwg"




Else
'DO NOTHING
GoTo Endline2
End If


Endline2:


   Next file_

Вы можете использовать метод GetBaseName, чтобы получить только имя файла без расширения

Затем используйте функцию INSTRREV, чтобы найти позицию последнего "#" (на тот случай, если кто-то использовал "#" в части {name}).

Затем используйте функцию ВЛЕВО, чтобы получить часть "TE1801_200-01_{name}_#", и теперь вы можете добавить к ней подстановочный знак, например "TE1801_200-01_{name}_#*.*". (Неважно, есть ли у вас "#" в конце на этом этапе.)

Введите полный путь и получите все подходящие файлы.

Переместите эти файлы.

Теперь сохраните текущий файл с его номером версии.

Другие вопросы по тегам