Link to home
Start Free TrialLog in
Avatar of tgphelp
tgphelp

asked on

VBS script not working on windows 7 64 bit

Hi all I have a script that worked great to clear out a file with XP and windows xp
and works great on servers when run for a 2003 server

Im trying to modify it to work on windows 7 64bit as we have an autocad virus multiplying and I need to crush it on end users machines,  now i just dabble in code and grab some from sites but this has been great in the past see code below however when I run it one windows 7 64 bit it errors out and says like 10 character 3

Permission denied

Any help would be great so I dont have to manually search each machine in our office

START_FOLDER = "D:\"
PREFIX = "acad.lsp"

Set oFSO = CreateObject("Scripting.FileSystemObject")

ProcessSubFolders oFSO.GetFolder(START_FOLDER), iCount

Sub ProcessSubFolders(oFolder, iCount)
  Set cFiles = oFolder.Files
  For Each oFile In cFiles
    If Left(oFile.Name, Len(PREFIX)) = PREFIX Then
      oFile.Delete
      iCount = iCount + 1
    End If
  Next
  For Each oSubFolder In oFolder.SubFolders
    ProcessSubFolders oSubFolder, iCount
  Next
End Sub

WScript.Echo "Files deleted: " & iCount

Open in new window

Avatar of Lee W, MVP
Lee W, MVP
Flag of United States of America image

Post a screen shot of the error you're having.
Avatar of tgphelp
tgphelp

ASKER

Here you go
Capture.JPG
Definitely need a screen shot of your error message - your script works fine on my Win8 x64 system.
Are you running as an administrator?  Try that.  Your issue appears to be NTFS permissions based, not script based.  The user running this does not have appropriate access to the path you are looking at.
What is the Windows system drive, C: or D:?

~bp
Avatar of tgphelp

ASKER

System drive is c I've tried both and running as the domain admin on the computer as well as the local admin

Have tried launching from elevated cmd but same issue
Avatar of tgphelp

ASKER

I've tried this on my home computer with same results to make sure it wasn't a domain gpo stopping it
Locate the path the message is caused by, e.g. by printing out each path processed.
You can also ignore the error with on error resume next, but that should be the means of last resort only.
My take is that you have virtual folders on D:. Those came starting with Vista/2008 to stay "compatible" with prior releases, as predefined paths changed a lot then. Example is Documents and Settings, which is Users now.
Avatar of tgphelp

ASKER

What would I add to the code to show that right now targeting each drive and get the number of files deleted
Give this a try, it will skip folders it can't access.

START_FOLDER = "D:\"
PREFIX = "acad.lsp"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

ProcessSubFolders objFSO.GetFolder(START_FOLDER, intCount)

Sub ProcessSubFolders(objFolder, intCount)
    On Error Resume Next

    For Each objFile In objFolder.Files
       If Left(objFile.Name, Len(PREFIX)) = PREFIX Then
          Wscript.Echo "Deleted file: " & objFile.Path
          objFile.Delete
          intCount = intCount + 1
       End If
    Next

   If Err.Number = 0 Then
      For Each objSubFolder In objFolder.Subfolders
         ProcessSubFolders objSubFolder, intCount
      Next
   Else
      Wscript.Echo "Skipped folder: " & objFolder.Path
   End If
End Sub

WScript.Echo "Files deleted: " & intCount

Open in new window

~bp
Avatar of tgphelp

ASKER

User generated image got an error with your code
Avatar of tgphelp

ASKER

now if i just add  on error resume next, in my sub procedure in my code it works but i don't see where it error-ed
ASKER CERTIFIED SOLUTION
Avatar of Bill Prew
Bill Prew

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of tgphelp

ASKER

Bill thanks so much for the help its working it seems but there is one thing that is off it seems to count the skipped files/folders in the count so say it skipped 7 folders and there were no files to delete it says deleted 7 files

any quick adjustment so that doesnt count skips as deletes? thats so much for the help!
Not positive is this will work, but give it a try...

START_FOLDER = "D:\"
PREFIX = "acad.lsp"

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

ProcessSubFolders objFSO.GetFolder(START_FOLDER), intCount

Sub ProcessSubFolders(objFolder, intCount)
    On Error Resume Next

    For Each objFile In objFolder.Files
       If Left(objFile.Name, Len(PREFIX)) = PREFIX Then
          objFile.Delete
          If Err.Number = 0 Then
             Wscript.Echo "Deleted file: " & objFile.Path
             intCount = intCount + 1
          End if
       End If
    Next

   If Err.Number = 0 Then
      For Each objSubFolder In objFolder.Subfolders
         ProcessSubFolders objSubFolder, intCount
      Next
   Else
      Wscript.Echo "Skipped folder: " & objFolder.Path
   End If
End Sub

WScript.Echo "Files deleted: " & intCount

Open in new window

~bp