Создание подпапок и перемещение файлов в новые подпапки

Создание подпапок и перемещение файлов в новые подпапки

Я пытаюсь адаптировать код из цикла по всем папкам и всем его подпапки, помеченные как решенные для:

  • создать подпапку 2020 в серии подпапок
  • переместить все файлы из существующей подпапки в новую подпапку 2020

Однако код выдает ошибку Path not found. MoveFile также выдает ошибку Path not found.

Может ли кто-нибудь указать на ошибку в коде?

Sub Create_subfolders_move_files()

Dim Fso As Object, objFolder As Object, objSubFolder As Object
Dim FromPath As String
Dim FileInFolder As Object

FromPath = "C:\Users\xyz\"
Set Fso = CreateObject("Scripting.filesystemobject")
Set objFolder = Fso.GetFolder(FromPath)

For Each objSubFolder In objFolder.subfolders
    For Each FileInFolder In objSubFolder.Files

            FileInFolder.Move (objSubFolder.path & "\2020\")

    Next FileInFolder
    
Next objSubFolder

End Sub

person cdfj    schedule 28.12.2020    source источник


Ответы (1)


Папка C:\Users\xyz не существует, поэтому вы не можете обратиться к ней с помощью метода Fso.GetFolder (его можно использовать только для существующих папок).

Во-первых, вам нужно создать его, и вы можете сделать это с помощью метода Fso.CreateFolder. Однако этот метод не работает, если вы хотите добавить вложенные папки, т.е.:

  • если папка C:\Users уже существует, вы можете создать папку C:\Users\xyz
  • вы не сможете создать папку C:\Users\xyz\abc напрямую. Выдает ту же ошибку - Путь не найден. Чтобы создать папку C:\Users\xyz\abc, сначала вам нужно создать папку C:\Users\xyz:
    Call fso.CreateFolder("C:\Users\xyz")
    Call fso.CreateFolder("C:\Users\xyz\abc")

Как вы можете догадаться, это не очень хорошая практика для жесткого кодирования подобных вещей, лучший подход — создать общую функцию, которая работает рекурсивно и создает все папки независимо от того, сколько уровней для этого требуется. Я уже создал такую ​​функцию, и вы можете ею свободно пользоваться: http://mielk.pl/en/download/code/system/createFolder.php

person mielk    schedule 28.12.2020
comment
Привет @mielk - папки уже существуют C:\Users\xyz и ›50 подпапок C:\Users\xyz\abc. Цель состоит в том, чтобы создать подпапку 2020 для каждой из существующих ›50 папок, например. C:\Users\xyz\abc\2020\. Я не понимаю, как я могу использовать код, на который вы ссылаетесь, потому что мне не нужно создавать папки, а также ваш folderPath является строкой. - person cdfj; 28.12.2020