帮助使用VBScript在Windows中创建Folder1/Folder2(这两个文件夹以前都不存在,我的意思是在strech中创建多级文件夹。)

帮助使用VBScript在Windows中创建Folder1/Folder2(这两个文件夹以前都不存在,我的意思是在strech中创建多级文件夹。),windows,scripting,vbscript,Windows,Scripting,Vbscript,我已使用VBscript创建了文件夹。当我给出文件夹路径时,脚本只创建最后一个文件夹,如果最后一个文件夹不存在,它将失败。。。我需要一个vbscript代码来创建一个单一的去整个文件夹结构。与unix中的mkdir-p类似,您可以使用此函数: Const PATH = "X:\folder0\folder1\folder2" Set fso = CreateObject("Scripting.FileSystemObject") BuildFullPath PATH Sub BuildFu

我已使用VBscript创建了文件夹。当我给出文件夹路径时,脚本只创建最后一个文件夹,如果最后一个文件夹不存在,它将失败。。。我需要一个vbscript代码来创建一个单一的去整个文件夹结构。与unix中的mkdir-p类似,您可以使用此函数:

Const PATH = "X:\folder0\folder1\folder2"

Set fso = CreateObject("Scripting.FileSystemObject")

BuildFullPath PATH

Sub BuildFullPath(ByVal FullPath)
    If Not fso.FolderExists(FullPath) Then
        BuildFullPath fso.GetParentFolderName(FullPath)
        fso.CreateFolder FullPath
    End If
End Sub
Function CreateFolderRecursive(FullPath)
  Dim arr, dir, path
  Dim oFs

  Set oFs = WScript.CreateObject("Scripting.FileSystemObject")
  arr = split(FullPath, "\")
  path = ""
  For Each dir In arr
    If path <> "" Then path = path & "\"
    path = path & dir
    If oFs.FolderExists(path) = False Then oFs.CreateFolder(path)
  Next
End Function
或者只需从脚本中调用mkdir命令:

Set objShell = CreateObject("Wscript.Shell")
objShell.Run "cmd /c mkdir X:\folder1\folder2\folder3"

必须拆分完整路径并创建每个文件夹。 示例函数:

Const PATH = "X:\folder0\folder1\folder2"

Set fso = CreateObject("Scripting.FileSystemObject")

BuildFullPath PATH

Sub BuildFullPath(ByVal FullPath)
    If Not fso.FolderExists(FullPath) Then
        BuildFullPath fso.GetParentFolderName(FullPath)
        fso.CreateFolder FullPath
    End If
End Sub
Function CreateFolderRecursive(FullPath)
  Dim arr, dir, path
  Dim oFs

  Set oFs = WScript.CreateObject("Scripting.FileSystemObject")
  arr = split(FullPath, "\")
  path = ""
  For Each dir In arr
    If path <> "" Then path = path & "\"
    path = path & dir
    If oFs.FolderExists(path) = False Then oFs.CreateFolder(path)
  Next
End Function
函数CreateFolderRecursive(完整路径) 暗方向、方向、路径 昏暗的 Set of s=WScript.CreateObject(“Scripting.FileSystemObject”) arr=拆分(完整路径,“\”) path=“” 对于arr中的每个目录 如果路径为“”,则路径=路径&“\” path=path&dir 如果oFs.FolderExists(路径)=False,则oFs.CreateFolder(路径) 下一个 端函数
虽然节目晚了,但是Shell.Application对象在XP中对我有效,如下所示

with CreateObject("Shell.Application")
  set oFolder = .NameSpace("C:\")
  if (not oFolder is nothing) then oFolder.NewFolder("a\b\c\d")
end with

不反对其他答案,但检查每个文件夹是否存在也是一个好主意——这样,当您尝试创建一个已经存在的文件夹时,它不会抛出错误

Sub ensureFolderExists(strFldrPath)
    If Not FSO.FolderExists(strFldrPath) AND strFldrPath <> "" Then
        ensureFolderExists(FSO.GetParentFolderName(strFldrPath))
        FSO.CreateFolder strFldrPath
    End If
End Sub
子文件夹存在(strFldrPath)
如果不是FSO.FolderExists(strFldrPath)和strFldrPath“”,则
ensureFolderExists(FSO.GetParentFolderName(strFldrPath))
FSO.CreateFolder strFldrPath
如果结束
端接头

非常感谢Pascal的回复,要使其与相对路径一起工作,条件可以更改为
If path“”,而不是objFSO。FolderExists(path)
@Vijayathryan,既然答案正确,你不应该接受吗?@Pascal Rodriguez,第二个选项有效,但如果将目录结构设置为参数,则会创建一个漏洞,调用方可以在其中插入shell命令,不是吗?选项2必须与文件夹名称中的空格抗衡,因此需要将其括在引号中。。。应该这样做:Shell.Run“cmd/cmkdir”“&PATH&”“谢谢。这很好。只有在将来偶然发现此线程的人才能发布
如果不是FSO.FolderExists(FSO.GetParentFolderName(strFldrPath)),则检查是完全多余的。只需在您已签入存在的父级上调用
ensureFolderExists
。您可能需要检查strFldrPath是否为空字符串。现在查看接受答案中的函数
BuildFullPath
:-)