0

我需要 VB 脚本从子文件夹中删除不必要/不需要的文件(具有不同的扩展名,但文件的姓氏很常见,例如 ABC123DEF.pdf、ABC456DEF.pdf、QWE145_source.xml、QWE784_source.xml 等)

有人可以帮忙吗

提前致谢

4

1 回答 1

0

从遍历文件夹树的骨架脚本开始:

Step00.vbs:

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)
    WScript.Echo oFile.Path
  End Sub
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
      traverseDir = traverseDir(oF, oWorker)
  Next
End Function

输出:

cscript step00.vbs
E:\trials\SoTrials\answers\13415663\test\13415663.notes
E:\trials\SoTrials\answers\13415663\test\13415663.kpf
E:\trials\SoTrials\answers\13415663\test\13415663-UE15.prj
E:\trials\SoTrials\answers\13415663\test\vbs\step00.vbs

Main 函数将文件夹和工作程序传递给 traverseDir 函数,并返回要传递给调用者 (OS) 的退出代码。traverseDir 函数将目录中的每个文件发送到 worker 的 processFile sub,为每个子文件夹递归调用自身,并向调用者返回错误代码(自身的主/前一个实例)。(微不足道的)工作人员只是回显文件的路径。

Step01.vbs 使用带有硬编码条件的工作程序来确定要删除哪些文件:

Class cWorker
  Public Sub processFile(oFile)
    If "notes" = goFS.GetExtensionName(oFile.Name) Then
       WScript.Echo "will delete", oFile.Path
       oFile.Delete
    End If
  End Sub
End Class

输出:

cscript step01.vbs
will delete E:\trials\SoTrials\answers\13415663\test\13415663.notes

基于此概念验证脚本,您可以增强 traverseDir 函数(对不可访问的文件夹进行错误处理,...)和/或 cWorker 类(更复杂的条件、错误处理、日志记录...)。

更新:

请参阅此递归文件夹访问脚本以获取进一步增强骨架的想法。

于 2012-11-16T12:04:00.230 回答