Afficher un message
Vieux 09/10/2007, 21h47   #3
urkec
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut RE: Need with delete old files script

"Dave Allen" wrote:

> I need a script that will delete files and folders older then 30 days.
> I found this script and it works except it does not scan sub-folders
>
> http://blogs.msdn.com/benjguin/archi...es-script.aspx
>
> Does anyone know how to make this scan sub-folders?


I tried to modify your script to enumerate files recursively.
Based on a post I saw in this group recently, the script will not work with
folder names that include "'" or "}". In that case you will have to use
double instead of single quotes and double the backslashes when executing the
ASSOCIATORS OF query (I hope I got that right). If you are not going to use
the script remotely, FSO is faster than WMI (recent post by R. Mueller
compares the two methods).

This is the modified script, I used ASSOCIATORS OF query with
Win32_SubDirectory class, like in the post by Dveit. I don't have time to
test it, but if you search this group, you can find other samples for working
with files and folders.

option explicit

if WScript.Arguments.Count <> 2 then
WScript.Echo "usage : DeleteOldFiles.vbs <folder> <nb of days ago>"
WScript.Echo "sample: DeleteOldFiles.vbs C:\Windows\temp 90"
WScript.Quit
end if

dim folder
dim nbFiles
dim totalFiles
dim nbErrors
dim limitDate
dim formattedLimitDate
dim nbDays

nbFiles = 0
totalFiles = 0
nbErrors = 0

folder = WScript.Arguments(0)
nbDays = WScript.Arguments(1)

'calculate and format limit date
limitDate = DateAdd("d", -1 * nbDays , Date)

formattedLimitDate = DatePart("yyyy", limitDate)

if DatePart("m", limitDate) < 10 then
formattedLimitDate = formattedLimitDate & "0"
end if
formattedLimitDate = formattedLimitDate & DatePart("m", limitDate)

if DatePart("d", limitDate) < 10 then
formattedLimitDate = formattedLimitDate & "0"
end if
formattedLimitDate = formattedLimitDate & DatePart("d", limitDate)

'show what will be done
WScript.Echo "Will remove files from " & folder & " with a date older than "
& formattedLimitDate & " (" & nbDays & " days ago)"


Call DoTheJob(folder)

'Show the result
Wscript.Echo "Total files in folder: " & totalFiles
WScript.Echo "Deleted files: " & nbFiles
WScript.echo "Errors: " & nbErrors

WScript.Echo "--- end of script execution ---"


Sub DoTheJob (fldr)

dim strComputer
dim objWMIService
dim colFileList
dim objFile
dim result
dim colSubfolders
dim objSubfolder

'Get the files and delete the old ones
strComputer = "."

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colFileList = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='" & fldr & "'} Where " _
& "ResultClass = CIM_DataFile")

For Each objFile In colFileList
totalFiles = totalFiles + 1
if objFile.CreationDate < formattedLimitDate then

'result = objFile.Delete()
WScript.Echo objFile.Name & " will be deleted"

'WScript.Echo objFile.Name & " - " & objFile.CreationDate & ".Delete Result:
" & result
if result = 0 then
nbFiles = nbFiles + 1
else
nbErrors = nbErrors + 1
end if
end if
Next

Set colSubfolders = objWMIService.ExecQuery _
("ASSOCIATORS OF {Win32_Directory.Name='" & fldr & "'} Where " _
& "AssocClass = Win32_SubDirectory " _
& "ResultRole = PartComponent")

For Each objSubfolder In colSubfolders
Call DoTheJob (objSubfolder.Name)
Next

End Sub


--
urkec
  Réponse avec citation
 
Page generated in 0,08221 seconds with 9 queries