Solved

Vbscript - How to exclude a subdirectory from a log file backup

Posted on 2009-07-10
3
921 Views
Last Modified: 2012-05-07
I have the script below that backs up certain log files once a day. Currently it backs up the following directory in its entirety (c:\Dolphin\FSDev\FSPro\Live Site\). Within this directory there are seven subdirectories one of which i wish to exclude from the backup. Could someone possibly give me some pointers as to how to approach this as i am a vb novice and my google searches have drawn a blank.

Thanks in advance
<job id="main">		

	<script language="VBScript">

		Dim strFilePath

		Dim strdest

		Dim objFSO

		Dim objFileCopy

	    Dim dayToCompare

     '   dayToCompare = CDate("1")	    				    

	

	'MsgBox dayToCompare

		strdest = "\\matrix2\IBELogs\"			

        

        strComputer = "."

        

        'display computer name

        Set WshNetwork = WScript.CreateObject("WScript.Network")

         'WScript.Echo(WshNetwork.ComputerName)       
 

        'To do with windows service

        Set objWMIService = GetObject("winmgmts:" _

        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
 

        Set objFSO = CreateObject("Scripting.FileSystemObject")

       

        'Get the folder directory 

        Set objFolder = objFSO.GetFolder("C:\Dolphin\FSDev\FSPro\Live Site\DataSourceLogfiles")
 

        'Get the subfolder collection for the directory

        Set colSubfolders = objFolder.Subfolders

            

          Dim dateComparison 

          Dim dateToSaveFileAs

          

		  Dim folderNameArray 

		  Dim currentFolderName

		  Dim newFolderName

          Dim folderDate

          Dim splitValue

          Dim strYear

          Dim strMonth

          Dim strDay

          Dim strHours

          Dim strMinutes

          Dim strSeconds

          Dim strConcat       

          Dim lFileDateAndCurrentDateDiff

       

         Set filesys = CreateObject("Scripting.FileSystemObject") 

                 Set testfile= filesys.CreateTextFile("C:\ArchiveBatchFile\Logs\ArchiveEventLogFile.txt", True) 

testfile.Write "File transfer from server" & " "& WshNetwork.ComputerName & " "& "started at" &" " & Date 

       

       For Each objSubfolder in colSubfolders       

           dateComparison = Date          

           

          'Gets the interval between date created and current dates.

          lFileDateAndCurrentDateDiff = DateDiff("d",objSubfolder.DateCreated, dateComparison)

          

          if lFileDateAndCurrentDateDiff = 1 Then

              'Populate all the date variables requried 

               strYear = Year(objSubfolder.DateCreated)           

               strMonth = Pd(Month(objSubfolder.DateCreated),2)

               strDay = Pd(Day(objSubfolder.DateCreated),2)

               strHours = Pd(Hour(objSubfolder.DateCreated),2)

               strMinutes = Pd(Minute(objSubfolder.DateCreated),2)

               strSeconds = Pd(Second(objSubfolder.DateCreated),2)

                          

               ' character to build string

                 strConcat = "-"       

              'convert and assign Folder Date to a variable for later use.

              'folderDate = FormatDateTime(objSubfolder.DateCreated,2)

              

               folderDate = strYear & strConcat & strMonth & strConcat & strDay & " " &_

               strHours & strConcat & strMinutes & strConcat & strSeconds

              'find and replace / to meet file naming conventions

              folderDate = Replace(folderDate,"/","-")

              

              splitValue = "_"

              'assign the current folder name

              currentFolderName = objSubfolder.Name          

              

              'split the current folder 

              folderNameArray =  Split(currentFolderName, splitValue, -1, 1)

              

              'Insert the created date into the split as we want to ensure that the folders creation

              'date is retained

              newFolderName = folderNameArray(0) & splitValue & folderDate & splitValue & folderNameArray(2)

              

              'Copy to archive destination

               objSubfolder.Copy(strdest & newFolderName)          

  	       objSubfolder.Delete

               	

                testfile.Write  newFolderName & "successfully copied from computer" & " " & WshNetwork.ComputerName & vbCr & vbLf

              

              'WScript.Echo newFolderName & "successfully copied from computer" & " " & WshNetwork.ComputerName          

                               

           end if                     

        Next
 

	   testfile.Write "File transfer from server" & " "& WshNetwork.ComputerName & " "& "finished at at" &" " & Date & vbCr & vbLf

        testfile.Close  

        Function pd(n, totalDigits) 

                if totalDigits > len(n) then 

                    pd = String(totalDigits-len(n),"0") & n 

                else 

                    pd = n 

                end if 

         End Function 

       

	</script>

</job>

Open in new window

0
Comment
Question by:johnswaine
  • 2
3 Comments
 
LVL 10

Expert Comment

by:Alan_White
ID: 24824292
You need an IF statement within the For Each loop.  There would be nicer ways of doing this if you had more folders to exlcude but this will work.  I can post a fully modified script if you need but if you put the following line in just after the For Each and then put anotehr End If down just before the Next, it should work.
 

If  objSubfolder.name <> "TheFolderNameYouWantToExclude" Then

Open in new window

0
 
LVL 10

Accepted Solution

by:
Alan_White earned 500 total points
ID: 24840407
Since I've not heard back, here is the full script with my modification included, all you need to do is change the name of the folder you want to exlcude.
<job id="main">		

	<script language="VBScript">

		Dim strFilePath

		Dim strdest

		Dim objFSO

		Dim objFileCopy

	    Dim dayToCompare

     '   dayToCompare = CDate("1")	    				    

	

	'MsgBox dayToCompare

		strdest = "\\matrix2\IBELogs\"			

        

        strComputer = "."

        

        'display computer name

        Set WshNetwork = WScript.CreateObject("WScript.Network")

         'WScript.Echo(WshNetwork.ComputerName)       

 

        'To do with windows service

        Set objWMIService = GetObject("winmgmts:" _

        & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

 

        Set objFSO = CreateObject("Scripting.FileSystemObject")

       

        'Get the folder directory 

        Set objFolder = objFSO.GetFolder("C:\Dolphin\FSDev\FSPro\Live Site\DataSourceLogfiles")

 

        'Get the subfolder collection for the directory

        Set colSubfolders = objFolder.Subfolders

            

          Dim dateComparison 

          Dim dateToSaveFileAs

          

		  Dim folderNameArray 

		  Dim currentFolderName

		  Dim newFolderName

          Dim folderDate

          Dim splitValue

          Dim strYear

          Dim strMonth

          Dim strDay

          Dim strHours

          Dim strMinutes

          Dim strSeconds

          Dim strConcat       

          Dim lFileDateAndCurrentDateDiff

       

         Set filesys = CreateObject("Scripting.FileSystemObject") 

                 Set testfile= filesys.CreateTextFile("C:\ArchiveBatchFile\Logs\ArchiveEventLogFile.txt", True) 

testfile.Write "File transfer from server" & " "& WshNetwork.ComputerName & " "& "started at" &" " & Date 

       

       For Each objSubfolder in colSubfolders  

            If  objSubfolder.name <> "ExcludeFolderNameHere" Then

	           dateComparison = Date          

	           

	          'Gets the interval between date created and current dates.

	          lFileDateAndCurrentDateDiff = DateDiff("d",objSubfolder.DateCreated, dateComparison)

	          

	          if lFileDateAndCurrentDateDiff = 1 Then

	              'Populate all the date variables requried 

	               strYear = Year(objSubfolder.DateCreated)           

	               strMonth = Pd(Month(objSubfolder.DateCreated),2)

	               strDay = Pd(Day(objSubfolder.DateCreated),2)

	               strHours = Pd(Hour(objSubfolder.DateCreated),2)

	               strMinutes = Pd(Minute(objSubfolder.DateCreated),2)

	               strSeconds = Pd(Second(objSubfolder.DateCreated),2)

	                          

	               ' character to build string

	                 strConcat = "-"       

	              'convert and assign Folder Date to a variable for later use.

	              'folderDate = FormatDateTime(objSubfolder.DateCreated,2)

	              

	               folderDate = strYear & strConcat & strMonth & strConcat & strDay & " " &_

	               strHours & strConcat & strMinutes & strConcat & strSeconds

	              'find and replace / to meet file naming conventions

	              folderDate = Replace(folderDate,"/","-")

	              

	              splitValue = "_"

	              'assign the current folder name

	              currentFolderName = objSubfolder.Name          

	              

	              'split the current folder 

	              folderNameArray =  Split(currentFolderName, splitValue, -1, 1)

	              

	              'Insert the created date into the split as we want to ensure that the folders creation

	              'date is retained

	              newFolderName = folderNameArray(0) & splitValue & folderDate & splitValue & folderNameArray(2)

	              

	              'Copy to archive destination

	               objSubfolder.Copy(strdest & newFolderName)          

	  	       objSubfolder.Delete

	               	

	                testfile.Write  newFolderName & "successfully copied from computer" & " " & WshNetwork.ComputerName & vbCr & vbLf

	              

	              'WScript.Echo newFolderName & "successfully copied from computer" & " " & WshNetwork.ComputerName          

	                               

	           End If     

	        End If                     

	     Next

 

	   testfile.Write "File transfer from server" & " "& WshNetwork.ComputerName & " "& "finished at at" &" " & Date & vbCr & vbLf

        testfile.Close  

        Function pd(n, totalDigits) 

                if totalDigits > len(n) then 

                    pd = String(totalDigits-len(n),"0") & n 

                else 

                    pd = n 

                end if 

         End Function 

       

	</script>

</job>

Open in new window

0
 

Author Closing Comment

by:johnswaine
ID: 31602105
q
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

This is an addendum to the following article: Acitve Directory based Outlook Signature (http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_24950055.html) The script is fine, and works in normal client-server domains…
Hello again, all.  For those of you that have been following along, you'll know that this is my third article on this topic (though it is not Part III).  This article is sort of remedial, and probably the topic with which I should have started the s…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.

708 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now