Hi, I have a file (say "normal.dot") that may be under any user in c:\Documents and Settings. I am looking for a script that searches for this file and then deletes it.

I have searched the web but can't find one. Any ideas?

Thanks,

Mike.

0 Comments   [ + ] Show Comments

Comments

Please log in to comment

Answers

Rating comments in this legacy AppDeploy message board thread won't reorder them,
so that the conversation will remain readable.
0
Hi guys,

In regards to my original query, I have now gotten my script to find all instances of the "gadgetman.exe" file anywhere on the local machine, however, it only deletes the file from C:\, not the other instances in various places below this. Any ideas on how to modify this to complete the "search and destroy" off all instances locally and on a user's shared drive (s)?

Thanks, and enjoy the day, All!

Bill

This is what I have, pieced together from various scripts, pretty much none of it mine:

Const DeleteReadOnly = True
'Set oFSO = CreateObject("Scripting.FileSystemObject") (commented out because I didn;t see it helpinig, but needed to try it; wasn't sure what I was doing, as initially styated)


Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oWshShell = CreateObject("WScript.Shell")
sDir = oWshShell.ExpandEnvironmentStrings("%temp%\dir.txt")
sFileName = "\gadgetman.exe"

If oFSO.FileExists(sDir) Then oFSO.DeleteFile(sDir)

For Each oDrive In oFSO.Drives
    if oDrive.DriveType = 2 Then Search oDrive.DriveLetter
Next

Set oFile = oFSO.OpenTextFile(sDir, 1)
aNames = Split(oFile.ReadAll, VbCrLf)
oFile.Close
For Each sName In aNames
    If InStr(1, sName, sFileName, 1) > 0 Then WScript.Echo sName
    Next

dim filesys
Set filesys = CreateObject("Scripting.FileSystemObject")
filesys.CreateTextFile "\gadgetman.exe", True
If filesys.FileExists("\gadgetman.exe") Then
    filesys.DeleteFile "\gadgetman.exe"
    Wscript.Echo("File deleted")
End If


Sub Search(sDrive)
    WScript.Echo "Scanning drive " & sDrive & ":"
    oWshShell.Run "cmd /c dir /s /b " & sDrive & ":\" & sName & " >>" & sDir, 0, True
End Sub


This is the output:

Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

Scanning drive C:


This takes about a minute.

C:\Documents and Settings\watherton\gadgetman.exe
C:\Documents and Settings\watherton\My Documents\gadgetman.exe
C:\Users\watherton\gadgetman.exe
C:\Users\watherton\My Documents\gadgetman.exe
File deleted
Exit code: 0 , 0000h


The file, however, still exists in the aforementioned locations (except at the root of C:\, where it is now gone).
Answered 10/17/2011 by: athertonwj
Senior Yellow Belt

Please log in to comment
0

Okay, then, well, thanks anyhoo. :(

Answered 09/27/2011 by: athertonwj
Senior Yellow Belt

Please log in to comment
0

Anyone got a fix for me?

Thanks, folks!

Bill

Answered 09/15/2011 by: athertonwj
Senior Yellow Belt

Please log in to comment
0

Hi folks,

I am looking for a script that will find ALL instances of an .exe file (e.g., test.exe) on the machine AND shared drives and delete it. I have been trying to use the aforementioned pieces, modified, but I'm relatively new to this and haven't been able to spend as much time on scripting as I'd like to. Consequently, I have a hard time figuring out the logic. Anyhoo, if you can help, I'd greatly appreciate it; need to get a particular file basically out of our environment as it is messing up our printer scripts.

Thanks and enjoy the day!

Bill

Answered 09/14/2011 by: athertonwj
Senior Yellow Belt

Please log in to comment
0

Done.

Answered 01/14/2011 by: RobSheppard
Senior Yellow Belt

Please log in to comment
0

You can also rate the post if it resolved your problem.

Answered 01/14/2011 by: aogilmor
Ninth Degree Black Belt

Please log in to comment
0

Hello there,

I  just wanted to drop by and say thanks to all, but in particular to spartacus for the info/code on this thread.  Using this as a start, I was able to modify it for my own purposes and do something that's been bugging me for ages.  I thought it was only fair and decent to at least say thanks for the original vbscript.

-Rob

Answered 01/14/2011 by: RobSheppard
Senior Yellow Belt

Please log in to comment
0

I don't know for sure because I don't use WMI for file manipulation but have a look on MSDN for details of the SQL syntax. You might be able to use 'LIKE' instead of '='  and the SQL wildcard character '%'.

Answered 11/26/2010 by: VBScab
Red Belt

Please log in to comment
0

I am looking to delete certain cookie files so I need to use wild cards. What do I need to modify in this script? I have tried "*any*.txt" but that didn't work.

Answered 11/26/2010 by: honestgoofy
Yellow Belt

Please log in to comment
0

No, that's the amateur's way. Edit the code so that the work is done inside a function (use a Function rather than a Sub, so that you can return a value, Success or Failure). Then pass the folder name and file spec into the function as separate parameters. Remember - as ever - to error-trap everything, e.g. does the path passed in exist; does the file exist, did the file actually get deleted and so on. Assume NOTHING, other than that everything will go wrong.

Answered 05/07/2010 by: VBScab
Red Belt

Please log in to comment
0

Thank You Spartacus for the script it really helped. So if i was to delete the "Normal.DOT"  from LocalAppData folder as well should i write another script & change the following values or can we add something to the existing script?

Const TemplatesFolder      = "Application Data\Microsoft\Templates" TO
Const TemplatesFolder      = "Local Settings\Application Data\Microsoft\Templates"

Answered 05/06/2010 by: stabish
Orange Belt

Please log in to comment
0

Hi, I have a directory call "dirname" under c:\ directory. Under "dirname" directory i have different directories like "default" "vi11" "vi22" "vi33" "vi44" "vi55".

I am looking for a script that remove all directories that begin with "vi" without removing "default" directory.

Any ideas?

Thanks,
Jose

Answered 04/28/2010 by: notice
Yellow Belt

Please log in to comment
0

You'll have to add your own error trapping and compression/deletion verification.


Dim strSearchInDrive, strSearchForFileExtension, intCompressFilesOlderThenDays

strSearchInDrive = "E:"
strSearchForFileExtension = "dat"
intCompressFilesOlderThenDays = 3

CompressFilesWithExtensionOlderThenDays strSearchInDrive, strSearchForFileExtension, intCompressFilesOlderThenDays

'// source: http://blogs.technet.com/heyscriptingguy/archive/2006/02/03/how-can-i-search-for-multiple-file-extensions-in-a-single-wql-query.aspx
'// source: http://www.informit.com/articles/article.aspx?p=23751
Sub CompressFilesWithExtensionOlderThenDays(ByVal inDrive, ByVal fileExtension, ByVal olderThenDays)
Dim strComputer, objWMIService, colFiles, objFile
Dim FileDate, FileDaysOld

strComputer = "."

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_Datafile Where Extension = '" & fileExtension & "' AND Drive = '" & inDrive & "'")

For Each objFile in colFiles
FileDate = WMIDateStringToDate(objFile.LastModified) '// convert WMI date string to Date
FileDaysOld = CInt(Mid(DiffADate(FileDate), 2)) '// get positiv number of negative string

If FileDaysOld > olderThenDays Then
'WScript.Echo "(" & FileDaysOld & " days old) " & objFile.Name

'WScript.Echo "Compress to: " & objFile.Drive & objFile.Path & "\" & objFile.FileName & ".zip"
Call ZipFile(objFile.Name, objFile.Drive & objFile.Path & "\" & objFile.FileName & ".zip")

'WScript.Echo "Deleting: " & objFile.Name
Call DeleteFile(objFile.Name, True)
End If
Next
End Sub


'// source: http://msdn.microsoft.com/en-us/library/xhtyw595(VS.85).aspx
Function DiffADate(ByVal theDate)
    Const vbGeneralDate = 0

    theDate = FormatDateTime(theDate, vbGeneralDate)
    DiffADate = DateDiff("d", Now, theDate)
End Function

'// source: http://technet.microsoft.com/en-us/library/ee156576.aspx
Function WMIDateStringToDate(ByVal dtmInstallDate)
WMIDateStringToDate = CDate(Mid(dtmInstallDate, 5, 2) & "/" & _
Mid(dtmInstallDate, 7, 2) & "/" & Left(dtmInstallDate, 4) _
& " " & Mid (dtmInstallDate, 9, 2) & ":" & _
Mid(dtmInstallDate, 11, 2) & ":" & Mid(dtmInstallDate, 13, 2))
End Function

'// source: http://www.experts-exchange.com/Programming/Languages/Visual_Basic/VB_Script/Q_24128934.html
Function ZipFile(ByVal strSource, ByVal strTarget)
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim file, shl

set fso = CreateObject("Scripting.FileSystemObject")

'write zip file header
set file = fso.opentextfile(strTarget, ForWriting, true)
file.write "PK" & chr(5) & chr(6) & string(18,chr(0))
file.close

'copy source file to zip file
set shl = CreateObject("Shell.Application")
shl.namespace(strTarget).copyhere(strSource)
do until shl.namespace(strTarget).items.count = 1
  wscript.sleep 1000
loop

set shl = nothing
set fso = nothing
End Function

'// source: http://msdn.microsoft.com/en-us/library/thx0f315(VS.85).aspx
Sub DeleteFile(ByVal filePath, ByVal forceRemoval)
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    Call fso.DeleteFile(filePath, forceRemoval)

    Set fso = Nothing
End Sub

Answered 03/21/2010 by: AngelD
Red Belt

Please log in to comment
0

That's quite a bit of work to ask someone to do (properly) for free.

Seek out examples of scripts which do the individual jobs you want and then either chain them together of merge them into one script. Try computerperfomance.co.uk for examples.

Answered 03/21/2010 by: VBScab
Red Belt

Please log in to comment
0

Hey Guys i am looking for VB script that can look for particular file type lets says *.dat file could be anywhere in Drive E;
I would like to zip this file if its older then 3 days and then delete the original one.

would like to use this script to save space issues on drive.


Can anyone Help?
Jimmy or anyone can you Help?

Answered 03/20/2010 by: imonwifi
Yellow Belt

Please log in to comment
0

I'm answering my own question here as I managed to get it working using the following code:


'==========================================================================
' Option Explicit
On Error Resume Next
'==========================================================================
'
' Script to search and delete files only inside the logged on users profile.
' Define the files you need to delete in objDic.Add LCase lines
' Run this when a user log on and they will in fact delete their own files!
' Based on Jimmy Antony's script
'
'==========================================================================
Dim objDic
Dim oShell

Set objDic = CreateObject("Scripting.Dictionary")
' Define the files you need to delete
objDic.Add LCase("file1.txt"), ""
objDic.Add LCase("file2.txt"), ""
objDic.Add LCase("shortcut1.lnk"), ""

Set oShell = CreateObject("Wscript.Shell")
strUserProfile = oShell.ExpandEnvironmentStrings("%USERPROFILE%")

' This is where it will only search and delete in the logged on users profile
ShowFolderList(strUserProfile)

Function ShowFolderList(folderspec)
Dim fso, f, f1, s, sf
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(folderspec)
Set sf = f.SubFolders
For Each f1 in sf
ShowFolderList(f1.path)
ShowFileList(f1.path)
Next
End Function

Function ShowFileList(folderspec)
Dim fso, f, f1, fc, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(folderspec)
Set fc = f.Files
For Each f1 in fc
if objDic.Exists(LCase(f1.name)) then
fso.deletefile f1.path, true
end if
Next
End Function

Answered 02/17/2010 by: toonwolf
Yellow Belt

Please log in to comment
0

Sorry for not being more specific. What I'm trying to acheive is instead of searching through all profiles and delete the files I would like this script to run at logon, and only to check and delete files in the logged on user's profile. I know it's possible to use environment variables in vbscript, but I'm not sure how to use them.

I've tried to modify the script posted by Jimmy Antony above, but the file is not deleted. (BTW: I've tested the script above with C:\Documents and settings hardcoded and that's working ok) This is how my modified script looks like:


'==========================================================================
Option Explicit
On Error Resume Next
'==========================================================================
'
' DESCRIPTION: To append the environment variable.
'
' NAME: delete_folder.vbs
'
'
' AUTHOR: Jimmy Antony
' DATE: 01/10/2006

' USAGE: To delete the file "jimmy.dot" which is present any where in C:\Documents and Settings
'
' SEQUENCE: After installfinalize
'
'
' NOTE: This script will remove the folder forcefully
'
'==========================================================================
' This is where I declare the environment variable
Set oShell = CreateObject("Wscript.Shell")
strUserProfile = oShell.ExpandEnvironmentStrings("%USERPROFILE%")

' ShowFolderList("C:\Documents and Settings")
' Replaced hardcoded path with enviroment variable but the syntax must be wrong I think
ShowFolderList(%USERPROFILE%)

Function ShowFolderList(folderspec)
Dim fso, f, f1, s, sf
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(folderspec)
Set sf = f.SubFolders
For Each f1 in sf
ShowFolderList(f1.path)
ShowFileList(f1.path)
Next
End Function


Function ShowFileList(folderspec)
Dim fso, f, f1, fc, s
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder(folderspec)
Set fc = f.Files
For Each f1 in fc
if strcomp(f1.name,"mytestfile.txt") = 0 then
fso.deletefile f1.path, true
Exit For
Exit Function
end if
Next
End Function

Answered 02/16/2010 by: toonwolf
Yellow Belt

Please log in to comment
0

Nice and informative. Is that what you say when you take your car into the garage: "It doesn't work"? :)

What doesn't work? Is it that nothing is returned in strUserProfile? Or the is it the deletion which fails? As I said on another AppDeploy forum today, we're good, but fall somewhat short in our psychic abilities.

Answered 02/16/2010 by: VBScab
Red Belt

Please log in to comment
0

I would like to run this at logon and instead of searching for files in all profiles I would only like to search and delete files in the profile of the user logging on. IE: Replace
ShowFolderList("C:\Documents and Settings")  with ShowFolderList(%USERPROFILE%)
I know I need to declare this variable with:
Set oShell = CreateObject("Wscript.Shell")
strUserProfile = oShell.ExpandEnvironmentStrings("%USERPROFILE%")
but I can't seem to make it work.

Answered 02/16/2010 by: toonwolf
Yellow Belt

Please log in to comment
0

Did you rate his post? See the 'Rate post' link on each post?

Answered 08/26/2009 by: VBScab
Red Belt

Please log in to comment
0

Thanks Spartacus, your script has really helped

Answered 08/25/2009 by: mosquat
Orange Belt

Please log in to comment
0

Hey thanks Jimmy ;-)

Answered 08/20/2009 by: hari.ram66@gmail.com
Senior Yellow Belt

Please log in to comment
2

Use this script after the installfinalize sequence and will forcefully delete the file.
for testing purposes, i have kept the file name as jimmy.dot which has to be renamed as per the requirement.
important note: all the files with the same name which is present in any folder inside the c:\Documents and settings will be deleted.


'==========================================================================
Option Explicit
On Error Resume Next
'==========================================================================
'
' DESCRIPTION: To append the environment variable.
'
' NAME: delete_folder.vbs
'
'
' AUTHOR: Jimmy Antony
' DATE: 01/10/2006

' USAGE: To delete the file "jimmy.dot" which is present any where in C:\Documents and Settings
'
' SEQUENCE: After installfinalize
'
'
' NOTE: This script will remove the folder forcefully
'
'==========================================================================
ShowFolderList("C:\Documents and Settings")


Function ShowFolderList(folderspec)
    Dim fso, f, f1, s, sf
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFolder(folderspec)
    Set sf = f.SubFolders
    For Each f1 in sf
  ShowFolderList(f1.path)
ShowFileList(f1.path) 
Next
End Function


Function ShowFileList(folderspec)
    Dim fso, f, f1, fc, s
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFolder(folderspec)
    Set fc = f.Files
    For Each f1 in fc
      if strcomp(f1.name,"jimmy.dot") = 0 then
      fso.deletefile f1.path, true
      Exit For
      Exit Function
      end if
    Next
End Function

Answered 09/30/2006 by: jimmy.alappatt
Senior Yellow Belt

Please log in to comment
0

As it stands, the script I posted will search for and delete the NORMAL.DOT file in every users profile located in the Application Data\Microsoft\Templates folder. This should work for every user having a profile folder under C:\Documents and Settings.

However I made an exception for the following "special" case profiles -

Default User,
Administrator,
All Users,
NetworkService,
LocalService

(the last two probably won't contain a normal.dot, in any case, but there you go)

If you want an outright deletion of *all* normal.dot files from

Application Data\Microsoft\Templates  then alter the following line in the script :

Const DeleteProtectedUsers = "FALSE"
to

Const DeleteProtectedUsers = "TRUE"

If your Templates path differs from  Application Data\Microsoft\Templates then you can alter the following line :

Const TemplatesFolder      = "Application Data\Microsoft\Templates" to meet your own particular needs.

Regards,

Spartacus

Answered 09/29/2006 by: spartacus
Third Degree Brown Belt

Please log in to comment
0

Spartacus - sorry - just spotted what I need to do - need to change ConstDelete..... to "False". Will give it a try.

Answered 09/29/2006 by: Meic
Second Degree Blue Belt

Please log in to comment
0

Thanks Brenthunter and Spartacus for your replies.

Spartacus - as I don't know which user's profile it is in, what do I change to search every user under Docs and Settings?

Thanks very much,

Mike.

Answered 09/29/2006 by: Meic
Second Degree Blue Belt

Please log in to comment
3

Perhaps worth noting that there may be some folders where you might not wish to delete the normal.dot file from (e.g. Default User profile (?))

With this in mind,  the following VB Script uses an exemptions list to bypass any folders you wish to preserve the file in :

' Sample VB Script to remove a designated file (default is NORMAL.DOT) located in the profile folder for every user on the
' system. There is provision for exempting certain folders via the constant ProtectedUsers which is set to a comma separated
' list which can be altered according to your requirements
'
' You should alter constant DeleteProtectedUsers from FALSE to TRUE to delete *ALL* copies of the file regardless of profile
'

Const FileToDelete        = "Normal.DOT"
Const AllUsers            = "\All Users"
Const DeleteProtectedUsers = "FALSE"
Const TemplatesFolder      = "Application Data\Microsoft\Templates"
Const ProtectedUsers      = "Default User,Administrator,All Users,NetworkService,LocalService"

Dim oFSO, oWSH
Dim sAllUsersProfile, oAllUsersFolder, sProfilesRoot, oFolder
Dim colFSOSubFolders
Dim protuserarray
Dim DeleteFlag

On Error Resume Next ' this is set because the designated file may be locked from deletion

protuserarray = Split(ProtectedUsers,",")

' Instantiate the objects

Set oFSO    = CreateObject("Scripting.FileSystemObject")
set oWSH    = CreateObject("WScript.Shell")

' Get the Allusers profile folder path first and from this determine profiles parent folder
'

sAllUsersProfile    = oWSH.ExpandEnvironmentStrings("%ALLUSERSPROFILE%")
Set oAllUsersFolder = oFSO.GetFolder(sAllUsersProfile)
sProfilesRoot      = oAllUsersFOlder.ParentFolder

' Now enumerate all existing user profile folders

Set oFolder            = oFSO.GetFolder(sProfilesRoot)
Set colFSOSubfolders  = oFolder.Subfolders

' Now go through each existing user profile folder looking for the designated file to delete

For Each objSubfolder in colFSOSubfolders
  DeleteFlag = "TRUE"
  if oFSO.FileExists(sProfilesRoot & "\" & objSubfolder.Name & "\" & TemplatesFolder & "\" & FileToDelete) then
    ' Found the file, now establish whether containing folder is on the exempt list
    if NOT DeleteProtectedUsers then
    For Each element in protuserarray
      if ucase(element) = ucase(objSubfolder.Name) then
          DeleteFlag = "FALSE" ' mark this occurrence of the designated file as exempt from deletion
          exit for
      end if
      Next
    end if
    If DeleteFlag then
      ' File was found in a folder that is not exempt, so go ahead and attempt to delete
      oFSO.DeleteFile sProfilesRoot & "\" & objSubfolder.Name & "\" & TemplatesFolder & "\" & FileToDelete,TRUE
    end if
  end if
Next

' Clean up before exiting
set oFSO = Nothing
set oWSH = Nothing


Hope this is of some use [:)]

Regards,

Spartacus

Answered 09/22/2006 by: spartacus
Third Degree Brown Belt

Please log in to comment
1

You could just use the cmd processor for this:

cmd /c "c: & cd c:\docume~1 & del normal.dot /s"

Answered 09/21/2006 by: brenthunter2005
Fifth Degree Brown Belt

Please log in to comment
Answer this question or Comment on this question for clarity