Permission Denied Error on VB Script

Posted on 2009-05-06
Last Modified: 2012-05-06
I receive a permission denied error on line 34, character 10 when I run this script against a folder location that has multiple nested folder levels and lots of files.  I am running the script against the root folder.  I have gone back through and reapplied permissions to every single file and folder for 'Everyone'.  I even made a copy of the entire folder structure, then manually deleted the files and folders using Windows explorer.  This confirmed that there was not a permission issue with accessing the files.  I am running the script locally on the actual computer the folder if located on.  I can run the script against a single folder within the root folder and it works okay.  I can also add each folder into the script text file and it will delete a few then stop with a permission issue.  I assume this has something to do with a filename length or folder name length.

Again, this is not an actual permission issue as I can manually delete all of the files and folders myself.  The script is run locally so it does not have permission issues.
Dim fso, startFolder, OlderThanDate

Dim strFilename, strPath


Set fso = CreateObject("Scripting.FileSystemObject")

strFilename = "c:\work\ee\urgent.txt"

OlderThanDate = DateAdd("d", -60, Date)  ' 60 days (adjust as necessary)'


      set objFSO = CreateObject("Scripting.FileSystemObject")

      if objFSO.FileExists(strFilename) Then

            set objFile = objFSO.GetFile(strFilename)

            Dim TextStream

            Set TextStream = objFile.OpenAsTextStream(1,0)

            Dim Line,i


            Do While Not TextStream.AtEndOfStream

                  strPath = trim(TextStream.readline)

                  DeleteOldFiles strPath, OlderThanDate

                  RemoveEmptyFolders strPath



            Set TextStream = nothing


            Msgbox "Input File not found"

      End If

Msgbox "Old Backup files have been deleted...Done !!"


Function DeleteOldFiles(folderName, BeforeDate)

   Dim folder, file, fileCollection, folderCollection, subFolder


   Set folder = fso.GetFolder(folderName)

   Set fileCollection = folder.Files

   For Each file In fileCollection

      If file.DateLastModified < BeforeDate Then


      End If



    Set folderCollection = folder.SubFolders

    For Each subFolder In folderCollection

       DeleteOldFiles subFolder.Path, BeforeDate



End Function



Sub RemoveEmptyFolders(sFolderName)


        Dim objFolder, objSubFolders, objFiles

        Dim xFolder, xFile

        Dim ret


        'On Error Resume Next'


        Set objFolder = fso.GetFolder(sFolderName)

        Set objSubFolders = objFolder.SubFolders

        Set objFiles = objFolder.Files

        'count files'

        iTotFiles=iTotFiles + objFiles.count

        'set to remove readonly

        Const READONLY = 1

        For Each xFile In objFiles

                xFile.Attributes = xFile.Attributes And Not READONLY



        For Each xFolder In objSubFolders

           xFolder.Attributes = xFolder.Attributes And Not READONLY

           RemoveEmptyFolders (xFolder.Path)



        'count directories found'



        ' If the folder is empty then delete the folder.'

        If objFiles.Count <= 0 and objSubFolders.count <= 0 Then


                fso.DeleteFolder sFolderName, True

        End If


End Sub

Open in new window

Question by:murryc
  • 2
  • 2
LVL 14

Accepted Solution

rejoinder earned 500 total points
ID: 24320774
Can you change line 34 to read;
fso.DeleteFile file.Path
fso.DeleteFile file.Path, True

See if either of those help.

Author Comment

ID: 24329963
fso.DeleteFile file.Path, True did the trick.

I have another small tweak.  Let me know if you want to me start a new question for it, since you already answered by first question.  This one might be super easy though.

The script deletes files older than a certain number of days.  I need to tweak it to delete files NEWER than 1-1-2009.  
LVL 14

Assisted Solution

rejoinder earned 500 total points
ID: 24330020
No problem.

You will have to code the date into the variable OlderThanDate;
OlderThanDate = CDate("01/01/2009")
Change this line;
If file.DateLastModified < BeforeDate Then
to this...
If file.DateLastModified > BeforeDate Then

That should do it.

Author Comment

ID: 24330805
Worked Perfectly!

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

Well hello again!  Glad to see you've made it this far without giving up.  In this, the fourth installment of my popular series, I'm going to cover functions and subroutines, what they are, and why they are useful.  Just in case you stumbled onto th…
This article is the result of a quest to better understand Task Scheduler 2.0 and all the newer objects available in vbscript in this version over  the limited options we had scripting in Task Scheduler 1.0.  As I started my journey of knowledge I f…
Windows 10 is mostly good. However the one thing that annoys me is how many clicks you have to do to dial a VPN connection. You have to go to settings from the start menu, (2 clicks), Network and Internet (1 click), Click VPN (another click) then fi…
Migrating to Microsoft Office 365 is becoming increasingly popular for organizations both large and small. If you have made the leap to Microsoft’s cloud platform, you know that you will need to create a corporate email signature for your Office 365…

911 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

16 Experts available now in Live!

Get 1:1 Help Now