Suppression de fichier de plus de 15 jours

pierremarc35 Messages postés 5 Date d'inscription mardi 18 novembre 2008 Statut Membre Dernière intervention 20 août 2010 - 9 févr. 2010 à 16:49
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 9 févr. 2010 à 21:28
Bonjour, je tiens tout d'abords à remercier celles et ceux qui participe à ce forum et qui nous mettes leurs code à disposition.

Je me suis inspiré de deux morceaux de code trouvé sur je site et j'ai essayé d'en faire un seul.

Dans le service ou je travail nous avons une zone d'échange temporaire pour que les utilisateurs puissent s'échanger des fichiers volumineux sans passer par la messagerie. Hors, l'espace disque n'étant pas extensible, nous avons souhaité mettre en place une routine qui permet de supprimer tous les fichiers vieux de plus de 15 jours à l'aide d'un vbs dont le contenu se trouve ci-dessous.

Mon problème est que parfois et donc par définition pas à chaque fois, l'exécution du script génère une erreur disant :

Ligne : 99
Caract. : 3
Erreur : 0x80041017
Code : 80041017
Source : (null)

Est ce qu'un des pro de VB peut me dire à quoi est due cette erreur, car entant que débutant, je suis arrivé à mon max en débuggage ...

Merci beaucoup !

'*******************************************************************************
' Script permettant D 'effacer les fichiers Qui date de plus de 15 jours
' Avec interface Graphique
'
'*******************************************************************************

' Nom du dossier dans le quel on veut supprimer les fichiers plus vieux de "nbJoursMax" jours
sDirectoryPath = ""

' Nombre de jours max
nbJoursMax = 15

strComputer = "."

Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
Set objFSO = CreateObject("Scripting.FileSystemObject")

'************************* Si le dossier dans le quel on veut supprimer les fichiers n'est pas spécifié, on le détermine ici
if sDirectoryPath = "" Then
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder _
(WINDOW_HANDLE, "Selectionner le dossier à traiter :", NO_OPTIONS, ".")
Set objFolderItem = objFolder.Self
Else
Set objFolderItem = objFSO.GetFolder(sDirectoryPath)
End If

strFolderName = objFolderItem.Path 

Set colSubfolders = objWMIService.ExecQuery _
("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
& "Where AssocClass = Win32_Subdirectory " _
& "ResultRole = PartComponent")

Wscript.Echo strFolderName

EcrireLog(vbCrlf & "Nettoyage du dossier " & strFolderName & " " & Date)

arrFolderPath = Split(strFolderName, "")
strNewPath = ""

For i = 1 to Ubound(arrFolderPath)
strNewPath = strNewPath & "\" & arrFolderPath(i)
Next

strPath = strNewPath & "\"

Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_DataFile where Path = '" & strPath & "'")

For Each objFile in colFiles
Set objReadOnlyFile = objFSO.GetFile(objFile.Name)
if DateDiff("d",objReadOnlyFile.DateLastModified ,Date)>nbJoursMax then
strLog = objFile.Name
EcrireLog(strLog)
'objFile.delete
end if
Next

For Each objFolder in colSubfolders
GetSubFolders strFolderName
Next

Wscript.Echo "Fin de traitement"

EcrireLog("Fin de traitement" & vbCrlf)

'************ Ecriture dans un ficher de log de la liste des fichiers et dossiers supprimés
Sub EcrireLog(str)
Const ForWriting = 8
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("./file_cleaner.txt",ForWriting,true)
f.write(str  & vbCrlf)
End Sub

Sub GetSubFolders(strFolderName)
Set colSubfolders2 = objWMIService.ExecQuery _
("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
& "Where AssocClass = Win32_Subdirectory " _
& "ResultRole = PartComponent")

For Each objFolder2 in colSubfolders2
strFolderName = objFolder2.Name
arrFolderPath = Split(strFolderName, "")
strNewPath = ""
For i = 1 to Ubound(arrFolderPath)
strNewPath = strNewPath & "\" & arrFolderPath(i)
Next

strPath = strNewPath & "\"

Set colFiles = objWMIService.ExecQuery _
("Select * from CIM_DataFile where Path = '" & strPath & "'")

nbFiles = 0
nbFilesDelete = 0

For Each objFile in colFiles
nbFiles = nbFiles + 1
Set objReadOnlyFile = objFSO.GetFile(objFile.Name)
if DateDiff("d",objReadOnlyFile.DateLastModified ,Date)>nbJoursMax then
nbFileDelete = nbFileDelete + 1
strLog = objFile.Name
EcrireLog(strLog)
'objFile.delete
end if
Next

GetSubFolders strFolderName

nb = nbFiles - nbFilesDelete

if nb = 0 then
strLog = objFolder2.Name
EcrireLog(strLog)
'objFolder2.delete
end if
Next
End Sub

1 réponse

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
9 févr. 2010 à 21:28
Bonjour,

La ligne 99, c'est "nbFilesDelete = 0" ?

Mon site
0
Rejoignez-nous