Modification code pour supp fichier dépassant une date

cs_ice1 Messages postés 8 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 20 mars 2009 - 20 mars 2009 à 10:43
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 20 mars 2009 à 22:12
bonjour à tous,
voilà j'ai trouvé sur ce forum un super code de mohaxx qui marche vraiment nickel mais j'ai besoin de l'adapter à mes besoins. j'aimerais savoir si vous pouvez me guider un peu :). voilà le script permet de supprimer les dossier et les fichiers (même dans les sous-dossiers) qui sont vieux de 15jours, l'emplacement du repertoire de base est demandé par interface graphique.
en faite moi j'aurais besoin de supprimer les anciens fichiers seulement et non les dossiers (donc toujours recherche dans les sous-répertoires) et que le repertoire de base soit écrit en dur car je veux lancer cette tâche en planification.

j'ai cru que c'était strFoldername qui prenait le chemin mais ça me fait des erreurs, j'ai essayé de mettre en commentaire les lignes que je pensais utile à lancer l'interface graphique mais à chaque fois il me manque des données (toujours des erreurs). j'ai bien compris que c'était plus la dernière partie qui à l'air de correspondre à mes besoins mais je n'arrive pas à le transformer (ou le scinder :p)

voici le code :
'*******************************************************************************
' Script permettant D 'effacer les fichiers Qui date de plus de 15 jours
' Avec interface Graphique
'
'*******************************************************************************
strComputer = "."
Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\cimv2")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")  
Set objFolder = objShell.BrowseForFolder _
    (WINDOW_HANDLE, "Selectionner le dossier à traiter :", NO_OPTIONS, ".")
Set objFolderItem = objFolder.Self
strFolderName = objFolderItem.Path
Set colSubfolders = objWMIService.ExecQuery _
    ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
        & "Where AssocClass = Win32_Subdirectory " _
            & "ResultRole = PartComponent")
'Wscript.Echo strFolderName
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)
     'Wscript.Echo objFile.Name & chr (10) &  objReadOnlyFile.DateLastModified
 if DateDiff("d",objReadOnlyFile.DateLastModified ,Date)>15 then
     objFile.delete
end if
Next
For Each objFolder in colSubfolders
    GetSubFolders strFolderName
Next
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
        'Wscript.Echo
        'Wscript.Echo 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 & "'")
        For Each objFile in colFiles
        Set objReadOnlyFile = objFSO.GetFile(objFile.Name)
        if DateDiff("d",objReadOnlyFile.DateLastModified ,Date)>15 then
            'Wscript.Echo objFile.Name & chr (10) &  objReadOnlyFile.DateLastModified
            objFile.delete
          end if
        Next
        GetSubFolders strFolderName
    Next
End Sub


je débute complètement en vbs alors si vous pouviez me parler très simplement lol
merci d'avance

8 réponses

cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
20 mars 2009 à 11:08
Bonjour

Remplacer les 2 lignes

Set objShell = CreateObject("Shell.Application")  
Set objFolder = objShell.BrowseForFolder _
    (WINDOW_HANDLE, "Selectionner le dossier à traiter :", NO_OPTIONS, ".")
par

Set objFolder = objFso.GetFolder("c:\mondossier....en dur")
0
cs_ice1 Messages postés 8 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 20 mars 2009
20 mars 2009 à 11:23
merci pour ta réponse mais cela me donne l'erreur "ligne 13 : cette objet ne gère pas cette propriété ou cette méthode : 'objFolder.Self"
la ligne 13 correspond à : Set objFolderItem = objFolder.Self
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
20 mars 2009 à 11:27
essaye alors
Set objFolderItem = objFso.GetFolder("c:\mondossier....en dur")
0
cs_ice1 Messages postés 8 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 20 mars 2009
20 mars 2009 à 11:40
mais cette fois une autre erreur : objet requis : 'objFolder' -> toujours la même ligne
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
20 mars 2009 à 12:02
Je ne comprends pas, il s'agit bien d'un VBScript, dans ce cas la déclaration n'est pas obligatoire

Dans la modification proposée, Il n'y a plus d'apparition de objFolder dans le code jusqu'à rencontrer la ligne : For each objFolder in colSubfolders


On a remplace
Set objFolder = objShell.BrowseForFolder _
    (WINDOW_HANDLE, "Selectionner le dossier à traiter :", NO_OPTIONS, ".")
Set objFolderItem = objFolder.Self

par
Set objFolderItem =objFso.GetFolder(".........")


Au besoin tracer l'avancement avec des command WScript.echo
Mes message d'erreur sont des boites de dialogue de titre "Windows Script Host" par exemple lorsque je mets un nom de répertoire inexistant
0
cs_ice1 Messages postés 8 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 20 mars 2009
20 mars 2009 à 13:14
ça y est ça marche  
en faite dans ton 1er message tu m'avais dis de remplacer :
Set objShell = CreateObject("Shell.Application")  
Set objFolder = objShell.BrowseForFolder _
    (WINDOW_HANDLE, "Selectionner le dossier à traiter :", NO_OPTIONS, ".")

et dans le dernier message tu m'as remis :
Set objFolder = objShell.BrowseForFolder _
    (WINDOW_HANDLE, "Selectionner le dossier à traiter :", NO_OPTIONS, ".")
Set objFolderItem = objFolder.Self

donc en refaisant bien comme tu m'as dit c'est bon !!
par contre si peux encore abuser un peu de ton aide, pourrais tu m'aider à supprimer la partie qui supprime les dossiers ? je n'aimerais pas avoir de mauvaises surprises ...
si je supprime cette partie es-ce que ce serai bon (cela sans causer de dommage):

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)
     'Wscript.Echo objFile.Name & chr (10) &  objReadOnlyFile.DateLastModified
 if DateDiff("d",objReadOnlyFile.DateLastModified ,Date)>15 then
     objFile.delete
end if
0
cs_ice1 Messages postés 8 Date d'inscription lundi 5 avril 2004 Statut Membre Dernière intervention 20 mars 2009
20 mars 2009 à 14:14
c'est bon j'ai réussi   merci beaucoup pour ton aide !!
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 mars 2009 à 22:12
Bonjour,

Pour info, ton code ne ressemble pas du tout à du .NET (cf la catégorie de ta question), merci de poster dans la bonne catégorie.
De plus, tu ne précise pas le langage utilise (j'espère que c'est du VBS).

http://nhen0039.chez-alice.fr/index.php
0
Rejoignez-nous