Solved

VB Script or Batch File to Delete Files and Folder Except for Two Specified Folders That Should not be Deleted

Posted on 2013-10-30
5
439 Views
Last Modified: 2013-11-04
I'm looking for a VB script or batch file that can delete all files and folders in a nested directory structure except for two specific folders.  An example is:

C:\test\nextlevel\nextlevel\

Delete all files and folders except for:

C::\test\nextlevel\nextlevel\dontdelete1
C::\test\nextlevel\nextlevel\dontdelete2

I would appreciate any advice on how to do this.

Thanks.
0
Comment
Question by:COV-Webmaster
  • 3
  • 2
5 Comments
 
LVL 53

Expert Comment

by:Bill Prew
ID: 39613181
So, for the folders not to be deleted, do you want to specify just the folder name, or the full path to that folder? So in you example, do you want to specify

C:\test\nextlevel\nextlevel\dontdelete1
C:\test\nextlevel\nextlevel\dontdelete2

or just

dontdelete1
dontdelete2

~bp
0
 

Author Comment

by:COV-Webmaster
ID: 39614432
I would like to specify the full path to the folders that should not be deleted.

Thanks.
0
 
LVL 53

Accepted Solution

by:
Bill Prew earned 500 total points
ID: 39615714
Okay, give this a try, adjust paths as needed in the top section.

' Define the folder to scan, and the age of files to delete
Const strBaseDir = "C:\test\nextlevel\nextlevel"

' Create a dictionary to hold the list of folders to skip
Set dicSkip = CreateObject("Scripting.Dictionary")
dicSkip.CompareMode = vbTextCompare

' Add the folders to the dictionary
dicSkip.Add "C:\test\nextlevel\nextlevel\dontdelete1", 0
dicSkip.Add "C:\test\nextlevel\nextlevel\dontdelete2", 0

' Set up filesystem object for usage
Set objFSO = CreateObject("Scripting.FileSystemObject")

' Look for files
PurgeFolder objFSO.GetFolder(strBaseDir)

' Subroutine (recursive) to search for files to delete
Sub PurgeFolder(objFolder)
   ' Skip any folders we don't want to process
   If Not dicSkip.Exists(objFolder.Path) Then

       ' Look at all files in this folder
       For Each objFile In objFolder.Files
            objFile.Delete
            ' WScript.StdOut.WriteLine "Deleted:" & objFile.Path
       Next

       ' Recursively drill down into subfolder
       For Each objSubFolder In objFolder.SubFolders
           PurgeFolder objSubFolder
       Next

       ' If folder is now empty, remove it
       If objFolder.Files.Count = 0 And objFolder.Subfolders.Count = 0 Then
          objFolder.Delete
          ' Wscript.Echo "Deleted folder: " & objFolder.Path
       End If

   End If
End Sub

Open in new window

~bp
0
 

Author Closing Comment

by:COV-Webmaster
ID: 39622756
Thanks very much!  This works exactly the way I need it to.
0
 
LVL 53

Expert Comment

by:Bill Prew
ID: 39622801
Great, glad that helped.

~bp
0

Featured Post

Space-Age Communications Transitions to DevOps

ViaSat, a global provider of satellite and wireless communications, securely connects businesses, governments, and organizations to the Internet. Learn how ViaSat’s Network Solutions Engineer, drove the transition from a traditional network support to a DevOps-centric model.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article describes some techniques which will make your VBA or Visual Basic Classic code easier to understand and maintain, whether by you, your replacement, or another Experts-Exchange expert.
This article will inform Clients about common and important expectations from the freelancers (Experts) who are looking at your Gig.
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

791 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question