Vbscript - скрипт для проверки наличия каждой подпапки - PullRequest
1 голос
/ 21 июня 2011

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

Итак, я подумал об умном способе сделать это, чтобы я мог повторно использовать код позже. Я хотел бы принять один аргумент - строку полного пути. И код делает все остальное.

Редактировать: Это законченный код от Жан-Франсуа Корбетт. Я дам тебе более 9000 благодарностей!

Public Sub createFolderStructure(ByVal strFullPath)
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    ' How many levels are there?
    nLevel = 0
    strParentPath = strFullPath
    Do Until strParentPath = ""
        strParentPath = objFSO.GetParentFolderName(strParentPath)
        nLevel = nLevel + 1
    Loop

    For iLevel = 1 To nLevel
        ' Figure out path for directory at level iLevel
        strParentPath = strFullPath
        For j = 1 To nLevel - iLevel
            strParentPath = objFSO.GetParentFolderName(strParentPath)
        Next

        ' Does this directory exist? If not, create it.
        If objFSO.FolderExists(strParentPath) = False Then
            Set newFolder = objFSO.CreateFolder(strParentPath)
        End If
    Next
End Sub

1 Ответ

1 голос
/ 21 июня 2011

Так как у вас все равно есть objFSO, почему бы не использовать методы GetParentFolderName и FolderExists. Действительно, FileSystemObject уже многое понял, так что избавьте себя от некоторой боли; Не нужно изобретать велосипед.

РЕДАКТИРОВАТЬ : Вот пример того, что, я думаю, вы хотите сделать. Адаптируйся, как считаешь нужным.

strFullPath = "C:\aaaa\Test\Vbscript" ' 4 levels

' How many levels are there?
nLevel = 0
strParentPath = strFullPath
Do Until strParentPath = ""
    strParentPath = FSO.GetParentFolderName(strParentPath)
    nLevel = nLevel + 1
Loop
Debug.Print nLevel ' nLevel = 4 for this example

For iLevel = 1 To nLevel
    ' Figure out path for directory at level iLevel
    strParentPath = strFullPath
    For j = 1 To nLevel - iLevel
        strParentPath = FSO.GetParentFolderName(strParentPath)
    Next j

    ' Does this directory exist? If not, create it.
    Debug.Print iLevel, strParentPath, FSO.FolderExists(strParentPath)
    If FSO.FolderExists(strParentPath) = False Then
        Set newFolder = FSO.CreateFolder(strParentPath)
    End If
Next iLevel
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...