【问题标题】:How to Create Folders and Subfolders in %AppData%如何在 %AppData% 中创建文件夹和子文件夹
【发布时间】:2014-01-17 00:02:57
【问题描述】:

首先,非常感谢您在过去六个月中为我提供了超过 3 个 Vbscript 的帮助,这些帮助挽救了我的生命。 我是 Vbscripting 的新手,我目前正在努力获取一个 Vbscript,它可以创建文件夹并同时复制文件,如果它们已经存在,则覆盖该文件夹和文件 要创建的文件夹和子文件夹 (Avaya) C:\Users\My Username\AppData\Roaming\Avaya\ Avaya\one-X Agent\2.5\ 文件从 (Myfile.txt) C:\Myfile.txt 到 C:\Users\My Username\AppData\Roaming\Avaya\one-X Agent\2.5\

我收到“找不到路径”错误,但如果我将路径留到 (Avaya),它会创建 Avaya 文件夹,但不是子文件夹 C:\Users\My Username\AppData\Roaming\Avaya\

这是我所拥有的,提前谢谢你

Dim fso, vFolder
Set objFso = WScript.CreateObject("Scripting.FileSystemObject")
set objWShell = wScript.createObject("WScript.Shell")
usrName = objWShell.expandEnvironmentStrings("%USERNAME%")
Set fso = CreateObject("Scripting.FileSystemObject")
Set vFolder = fso.CreateFolder("C:\Users\" & usrName & "\AppData\Roaming\Avaya\one-X Agent\2.5\")
CreateFolderDemo = vFolder.Path

【问题讨论】:

    标签: vbscript user-profile appdata


    【解决方案1】:

    一些错误:

    1. 你声明fso,但你使用objFso
    2. 您使用%USERNAME%,但您应该考虑改为%APPDATA%
    3. 您应该使用OPTION EXPLICIT 来检测拼写错误和未定义的变量
    4. 您应该通过一次调暗一个变量来使您的代码更易于阅读
    5. CreateFolder 不会创建整个树,因此您需要使用 FolderExists

    例如:

    Option Explicit
    Dim objWShell
    Set objWShell = WScript.CreateObject("WScript.Shell")
    Dim appData
    appData = objWShell.expandEnvironmentStrings("%APPDATA%")
    Dim objFso
    Set objFso = WScript.CreateObject("Scripting.FileSystemObject")
    If Not objFso.FolderExists(appData + "\Avaya") Then
      objFso.CreateFolder appData + "\Avaya"
    End If
    If Not objFso.FolderExists(appData + "\Avaya\one-X Agent") Then
      objFso.CreateFolder appData + "\Avaya\one-X Agent"
    End If
    If Not objFso.FolderExists(appData + "\Avaya\one-X Agent\2.5") Then
      objFso.CreateFolder appData + "\Avaya\one-X Agent\2.5"
    End If
    

    最后,尚不清楚为什么您的解决方案需要使用 VBScript。看来您的要求是创建文件夹和复制文件,这意味着批处理文件可能会简单得多。

    【讨论】:

      【解决方案2】:

      问题是CreateFolder 没有创建中间文件夹。 FSO 没有这样做的方法。像这样使用mkdir 可能更容易:

      Option Explicit
      
      Dim shl
      Set shl = CreateObject("WScript.Shell")
      Call shl.Run("%COMSPEC% /c mkdir ""%APPDATA%\Avaya\one-X Agent\2.5""",0,true)
      

      【讨论】: