16

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

3 Answers 3

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"
Sign up to request clarification or add additional context in comments.

4 Comments

To make it work with relative paths, the conditional can be changed to If path <> "" and not objFSO.FolderExists(path)
@VijayAthreyan, shouldn't you accept the answer, since it is correct?
@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?
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 & """"
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

Comments

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.