【问题标题】:VB Script to Delete specific subfolder删除特定子文件夹的 VB 脚本
【发布时间】:2012-11-17 08:13:13
【问题描述】:

我需要 VBScript / 命令提示符来删除具有特定名称的子文件夹

例如:

  1. E:\test\43\5512686\5512698\html\abc
  2. E:\test\43\5467686\5512699\html\abc
  3. E:\test\43\5587686\55147589\html\abc
  4. E:\test\45\5517586\5512698\html\abc

等等,

其中上面的示例“abc”文件夹需要删除

有人可以帮忙吗

提前致谢

【问题讨论】:

    标签: vbscript command-prompt


    【解决方案1】:

    有关背景/上下文,请参阅this skeleton for recursive file access。鉴于此文件夹结构:

    tree /A ..\test
    Folder PATH listing for volume eh
    Volume serial number is 0ED6-233C
    E:\TRIALS\SOTRIALS\ANSWERS\13415663\TEST
    +---vbs
    \---df
        +---1
        |   +---b
        |   |   \---x
        |   \---a
        |       \---abc
        \---2
            \---abc
                \---xx
    

    还有这个概念验证代码:

    Option Explicit
    
    Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")
    
    WScript.Quit Main()
    
    Function Main()
      Dim sDir : sDir = "..\test"
      Dim oWorker : Set oWorker = New cWorker
      Main = traverseDir(goFS.GetFolder(sDir), oWorker)
    End Function
    
    Class cWorker
      Public Sub processFile(oFile)
        ' not needed
      End Sub
      Public Function processFolder(oFolder)
        WScript.Echo "looking at", oFolder.Path
        processFolder = True
        If "abc" = oFolder.Name Then
           WScript.Echo "will delete", oFolder.Path
           oFolder.Delete
           processFolder = False
        End If
      End Function
    End Class
    
    Function traverseDir(oDir, oWorker)
      traverseDir = 0
      Dim oF
      For Each oF In oDir.Files
          oWorker.processFile oF
      Next
      For Each oF In oDir.SubFolders
          If oWorker.processFolder(oF) Then
             traverseDir = traverseDir(oF, oWorker)
          End If
      Next
    End Function
    

    输出:

    cscript step02.vbs
    looking at E:\trials\SoTrials\answers\13415663\test\vbs
    looking at E:\trials\SoTrials\answers\13415663\test\df
    looking at E:\trials\SoTrials\answers\13415663\test\df\1
    looking at E:\trials\SoTrials\answers\13415663\test\df\1\b
    looking at E:\trials\SoTrials\answers\13415663\test\df\1\b\x
    looking at E:\trials\SoTrials\answers\13415663\test\df\1\a
    looking at E:\trials\SoTrials\answers\13415663\test\df\1\a\abc
    will delete E:\trials\SoTrials\answers\13415663\test\df\1\a\abc
    looking at E:\trials\SoTrials\answers\13415663\test\df\2
    looking at E:\trials\SoTrials\answers\13415663\test\df\2\abc
    will delete E:\trials\SoTrials\answers\13415663\test\df\2\abc
    

    证据:

    tree /A ..\test
    Folder PATH listing for volume eh
    Volume serial number is 0ED6-233C
    E:\TRIALS\SOTRIALS\ANSWERS\13415663\TEST
    +---vbs
    \---df
        +---1
        |   +---b
        |   |   \---x
        |   \---a
        \---2
    

    您应该能够编写一个脚本来解决您的特定问题。

    更新:

    查看here 以了解应用于移动文件夹的方法。

    【讨论】:

      【解决方案2】:

      嗯,你需要阅读所有文件夹,比较子文件夹,如果它符合你的名字,删除它。

      使用它来获取您的子文件夹。

      Set fs = CreateObject("Scripting.FileSystemObject")
      Set f = fs.GetFolder("E:\test\43\5512686\5512698\html\")
      Set fc = f.SubFolders
      

      然后用它来删除你的文件夹。

      Set filesys = CreateObject("Scripting.FileSystemObject")
      If filesys.FolderExists("E:\test\43\5512686\5512698\html\abc") Then 
         filesys.DeleteFolder "E:\test\43\5512686\5512698\html\abc"
      End If
      

      使用这些 sn-ps,您可以轻松完成所需的代码。

      您似乎不确定父文件夹的不同名称,因此您必须从根文件夹开始并循环所有子文件夹并为每个文件夹级别执行此操作。

      【讨论】:

        猜你喜欢
        • 2016-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-12
        • 1970-01-01
        • 1970-01-01
        • 2015-10-15
        相关资源
        最近更新 更多