web-dev-qa-db-fra.com

Aide Pour créer Folder1/Folder2 dans Windows à l'aide de VBScript (les deux dossiers n'existaient pas auparavant, je veux dire créer des dossiers à plusieurs niveaux @ a strech.)

J'ai créé des dossiers en utilisant mon VBScript. quand je donne un chemin de dossier, le script ne crée que le dernier dossier. Si l'avant-dernier dossier n'existe pas, il échouera ... J'ai besoin d'un code vbscript pour créer l'intégralité de la structure de dossiers en une seule fois. comme mkdir -p sous unix

13
Vijay Athreyan

Vous pouvez utiliser cette fonction:

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

Ou appelez simplement la commande mkdir à partir de votre script:

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

Vous devez fractionner le chemin complet et créer chaque dossier. Exemple de fonction:

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
9
wickie79

Tard au spectacle, mais l'objet Shell.Application fonctionne pour moi sous XP, comme suit ...

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

Ne pas être en désaccord avec d’autres réponses, mais vérifier l’existence de chaque dossier est également une bonne idée. Ainsi, cela ne génère pas une erreur lorsque vous essayez de créer un dossier qui existe déjà.

Sub ensureFolderExists(strFldrPath)
    If Not FSO.FolderExists(strFldrPath) AND strFldrPath <> "" Then
        ensureFolderExists(FSO.GetParentFolderName(strFldrPath))
        FSO.CreateFolder strFldrPath
    End If
End Sub
1
Mitchell Bland