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

Posted

技术标签:

【中文标题】帮助使用 VBScript 在 Windows 中创建 Folder1/Folder2(这两个文件夹以前都不存在,我的意思是创建多级文件夹@a strech。)【英文标题】:Help To create Folder1/Folder2 in Windows using VBScript ( Both the folders not exists before, i mean to create multilevel folders @ a strech.) 【发布时间】:2011-05-23 09:14:36 【问题描述】:

我已经使用我的 VBscript 创建了文件夹。当我给出一个文件夹路径时,脚本只创建最后一个文件夹,如果最后一个文件夹不存在,它将失败......我需要一个 vbscript 代码来一次性创建整个文件夹结构。像 unix 中的 mkdir -p

【问题讨论】:

【参考方案1】:

你可以使用这个功能:

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"

【讨论】:

非常感谢帕斯卡的回复 要使其适用于相对路径,条件可以更改为If path <> "" and not objFSO.FolderExists(path) @VijayAthreyan,你不应该接受答案吗,因为它是正确的? @Pascal Rodriguez,第二个选项有效,但是如果您将目录结构作为参数,您会创建一个漏洞,调用者可以在其中注入 shell 命令,不是吗? 选项 2 必须与文件夹名称中的空格竞争,因此需要用引号括起来......应该这样做:Shell.Run "cmd /c mkdir """ & PATH & """"【参考方案2】:

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

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

【讨论】:

谢谢。这很棒。【参考方案3】:

迟到了,但 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

【讨论】:

【参考方案4】:

不同意其他答案,但检查每个文件夹是否存在也是一个好主意 - 这样当您尝试创建已存在的文件夹时它不会引发错误

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

【讨论】:

只发给以后偶然发现这个话题的人 If Not FSO.FolderExists(FSO.GetParentFolderName(strFldrPath)) then 检查是完全多余的。只需在父级上调用ensureFolderExists,您已经进行了存在检查。您可能需要检查strFldrPath 是否为空字符串。 现在看看接受的答案中的函数BuildFullPath :-))

以上是关于帮助使用 VBScript 在 Windows 中创建 Folder1/Folder2(这两个文件夹以前都不存在,我的意思是创建多级文件夹@a strech。)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用内部 Windows XP 选项在 VBScript 中解压缩文件

vbscript 通过任务计划程序在 Windows 10 中打开 excel 文件

使用 VBScript 制作批处理文件代码以使用 Unicode 符号

如何从 cmd 获取变量并在 vbscript 中显示 - Vbscript

如何用vbscript获取当前windows登陆的用户名?

是否可以在 UNIX 环境中运行 VBScript?