IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Boucle tant que ..


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 25
    Par défaut Boucle tant que ..
    bonjour

    je cherche a cree un bout de script (qui en rejoindra un autre plus tard )

    pour effacer tous les dossier vides d'un repertoire donné

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    ShowSubFolders FSO.GetFolder("d:\script")
     
     
    Sub ShowSubFolders(Folder)
     
        For Each Subfolder in Folder.SubFolders
            If Subfolder.Size = 0 Then
            objFSO.DeleteFolder Subfolder
            End If
            ShowSubFolders Subfolder
        Next
    End Sub
    ce code efface bien un dossier vide
    jai rajouté sa pour rapeller la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    For Each Subfolder in Folder.SubFolders
            ShowSubFolders
     
            next
    mais visiblement sa ne marche pas quelqun aurait une idée ?,

    merci d'avance

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    "ShowSubFolders" prends en paramètre un "Folder" lorsqu'il est appellé, mais toi tu n'en mets pas !!!
    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     For Each Subfolder in Folder.SubFolders
            objFSO.DeleteFolder Subfolder
            ShowSubFolders Subfolder
    Next
    Mais attention, cela détruit "d:\script" et tous ses sous dossier.

    Le code que tu utilises rappel "ShowSubFolders" de façon recursif.
    Voyant que tu ne maitrise pas trop la programmation, es tu sur de vouloir utiliser la récursivité ? Si elle est mal pensé et s'il y a une erreur dans la fonction, cela peut être assez dangereux !!!

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 25
    Par défaut
    merci je commencait a patauger

    je cherchait bien a faire une recusive ( executer tant que il reste un dossier vide)

    mais il ne faut pas toucher au dossier racine

    c'est pour vider un dossier partagé commun a plusieur utilisateur (un "transit")
    mais pas touche au dossier racine

    merci beucoup de ton aide ^^

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 25
    Par défaut erreur d'execution
    bonjour

    et bien voila jai encore un probleme grace a l'aide de cedric mon bout de code pour effacer les dossier vides marche nikel mais quand le je l'ajoute au mon script pour effacer les fichier de + de X jour et bin il me met une erreur

    ""erreur VBscript l'execution na pas pu s'effectuer""
    pour le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For Each objFile in colFiles  <== c'est ici 
    Set objReadOnlyFile = objFSO.GetFile(objFile.Name)
    if DateDiff("d",objReadOnlyFile.DateLastModified ,Date)> 15 then
    'Wscript.Echo objFile.Name & chr (10) & objReadOnlyFile.DateLastModified
    objFile.delete
    et voila le code entier au cas ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    
    
        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 <=== c'est la 
               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
    
    
       Set FSO = CreateObject("Scripting.FileSystemObject")
       Set objFSO = CreateObject("Scripting.FileSystemObject")
       set folder = FSO.GetFolder("d:\perso")
    
    
        For Each subfolder in Folder.SubFolders
            If Subfolder.Size = 0 Then
            objFSO.DeleteFolder Subfolder
            End If
        Next

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 25
    Par défaut
    Up je patauge toujour

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Au vu de ton erreur et de où elle se produit, il me semblerait que ta collection de fichier est vide. Peut être que cela est du à une mauvaise valeur de strPath. Essaye en mettant dans le code, à la place de strPath, le chemin du répertoire où tu fait tes opérations. Si le code marche alors c'est que strPath est mal construit.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. boucle tant que interminable
    Par ptitepo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/05/2008, 10h11
  2. Réponses: 22
    Dernier message: 20/05/2008, 10h25
  3. Boucle Tant que
    Par stefsas dans le forum SAS Base
    Réponses: 1
    Dernier message: 25/04/2008, 10h20
  4. exercice avec boucle tant que
    Par byteBoy dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 05/05/2006, 17h39
  5. [LG] Inversion avec une boucle tant que
    Par erickson dans le forum Langage
    Réponses: 2
    Dernier message: 09/12/2005, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo