Vbscript-用于检查每个子文件夹是否存在的脚本

Vbscript-用于检查每个子文件夹是否存在的脚本,vbscript,directory,Vbscript,Directory,我正在编写一个脚本,基本上将文件夹和文件从服务器复制到本地计算机。在处理这个问题时,我发现我需要一个函数,它基本上是一个完整文件夹路径的字符串,将其拆分并检查每个文件夹是否存在。如果没有,请创建文件夹 所以,我在想一个聪明的方法来做这件事,这样我以后可以重用代码。 我希望它接受一个参数,完整路径的字符串。代码完成了剩下的工作 编辑:这是Jean-François Corbett的完整代码。我会给你9000多块谢谢 Public Sub createFolderStructure(ByVal st

我正在编写一个脚本,基本上将文件夹和文件从服务器复制到本地计算机。在处理这个问题时,我发现我需要一个函数,它基本上是一个完整文件夹路径的字符串,将其拆分并检查每个文件夹是否存在。如果没有,请创建文件夹

所以,我在想一个聪明的方法来做这件事,这样我以后可以重用代码。 我希望它接受一个参数,完整路径的字符串。代码完成了剩下的工作

编辑:这是Jean-François Corbett的完整代码。我会给你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

既然您已经有了
objFSO
,为什么不使用它的方法呢。实际上,
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

既然您已经有了
objFSO
,为什么不使用它的方法呢。实际上,
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

您是否在没有显式
选项的情况下编码??如果是这样,你就是自找麻烦!是的,但那是因为我知道我在做什么;)不,真的。我通常使用选项显式。但是当我只是像这样画代码的时候就不行了:)你是不是在没有显式的
选项的情况下编码的??如果是这样,你就是自找麻烦!是的,但那是因为我知道我在做什么;)不,真的。我通常使用选项显式。但当我只是像这样画代码的时候就不行了:)太好了!这正是我所想的:)我简直不敢相信这不是以前创建的:)好的,我会试试这个,然后在完成后更新代码:)我想我应该更经常地检查msdn..嗯,你有什么建议吗?我的意思是,我可以得到父文件夹的名称并检查它是否存在。但是我不能一次创建文件夹和子文件夹,可以吗?也就是说,如果GetParentFolderName给了我“C:\Temp\Test\Vbscript”,那么我就不能用子文件夹和我能做的一切来创建它了?哇,这真的做到了!:)只是编辑了一些东西,但这是合理的!但我必须经历这一切,以确保我真正了解这里发生的一切。但我会的!:)美好的这正是我所想的:)我简直不敢相信这不是以前创建的:)好的,我会试试这个,然后在完成后更新代码:)我想我应该更经常地检查msdn..嗯,你有什么建议吗?我的意思是,我可以得到父文件夹的名称并检查它是否存在。但是我不能一次创建文件夹和子文件夹,可以吗?也就是说,如果GetParentFolderName给了我“C:\Temp\Test\Vbscript”,那么我就不能用子文件夹和我能做的一切来创建它了?哇,这真的做到了!:)只是编辑了一些东西,但这是合理的!但我必须经历这一切,以确保我真正了解这里发生的一切。但我会的!:)