web-dev-qa-db-ja.com

ヘルプVBScriptを使用してWindowsでFolder1 / Folder2を作成するには(両方のフォルダーは以前には存在しませんでした。つまり、ストレッチでマルチレベルフォルダーを作成することを意味します)。

VBscriptを使用してフォルダーを作成しました。フォルダパスを指定すると、スクリプトは最後のフォルダのみを作成します。最後のフォルダが1つしか存在しない場合、失敗します...フォルダ構造全体を一度に作成するにはvbscriptコードが必要です。 UNIXのmkdir-pのように

14
Vijay Athreyan

この関数を使用できます:

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

または、スクリプトからmkdirコマンドを呼び出すだけです。

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

フルパスを分割して、各フォルダーを作成する必要があります。関数の例:

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

ショーの後半ですが、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
2
Red

他の答えに異議を唱えることはありませんが、各フォルダーが存在するかどうかを確認することも良い考えです-そうすれば、すでに存在するフォルダーを作成しようとしてもエラーがスローされません

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