I have created folders using my VBscript. when i give a folder path, the script is creating only the last folder, if the last but one folder does not exists, it will fail... I need a vbscript code to create the entire folder structure on the single go. like mkdir -p in unix
            Asked
            
        
        
            Active
            
        
            Viewed 4.8k times
        
    3 Answers
44
            You could use this function:
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
Or simply call the mkdir command from your script:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "cmd /c mkdir X:\folder1\folder2\folder3"
        Cid
        
- 14,968
 - 4
 - 30
 - 45
 
        Pascal Rodriguez
        
- 981
 - 9
 - 12
 
- 
                    To make it work with relative paths, the conditional can be changed to `If path <> "" and not objFSO.FolderExists(path)` – Oriol May 27 '14 at 14:27
 - 
                    1@VijayAthreyan, shouldn't you accept the answer, since it is correct? – lpacheco Aug 11 '15 at 17:31
 - 
                    @Pascal Rodriguez, the second option works, but if you make the directory structure a parameter you create a vulnerability where the caller can inject a shell command, isn't it? – lpacheco Aug 11 '15 at 17:33
 - 
                    Option 2 has to contend with spaces in the folder name so it needs to be enclosed in quotes ... something like this should be done: Shell.Run "cmd /c mkdir """ & PATH & """" – Mike Q Jan 11 '21 at 17:09
 
10
            
            
        You must split the full path and create each folder. Example function:
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
        wickie79
        
- 470
 - 1
 - 3
 - 7
 
2
            
            
        Late to the show, but the Shell.Application object works for me in XP, as follows ...
with CreateObject("Shell.Application")
  set oFolder = .NameSpace("C:\")
  if (not oFolder is nothing) then oFolder.NewFolder("a\b\c\d")
end with
        Red
        
- 21
 - 1