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 :

déplacement dossiers VBS


Sujet :

VBScript

  1. #21
    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 : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Tu pourras le comprendre si tu lis les tuto que je t'ai passé en lien.
    Si tu n'as pas les bases inutiles que l'on t'explique ces points tu ne les comprendra pas.
    Un lien en plus à voir après les autres.
    Il explique tout sur le WMI qui est utilisé dans ce script :
    http://msdn.microsoft.com/en-us/library/aa394582.aspx
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  2. #22
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    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
     
    Dim OFS, MonFichier, FR, textCont 
    '1 je crée la référence du fichier 
    Set OFS = CreateObject("Scripting.FileSystemObject") 
    '2 je vais obtenir le fichier toto.txt qui est dans le répertoire windows. 
    Set Monfichier = OFS.GetFile("c:\windows\toto.txt") 
    '3 maintenant je vais ouvrir le fichier en lecture 
    Set FR = Monfichier.OpenAsTextStream( 1,0) 
    '4 je vais maintenant lire tout le fichier ligne / ligne et obtenir le tout dans une variable. 
    Do While Not FR.AtEndOfLine 
    '4B je vais maintenant lire le contenu de la première ligne 
       strLine = FR.ReadLine
       strFolderName = strLine
    Loop 
    '5B Je ferme le fichier. 
    FR.Close
    bon début il me semble pour ouvrir le fichier et lire ligne à ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Set colSubfolders = objWMIService.ExecQuery _
        ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
            & "Where AssocClass = Win32_Subdirectory " _
                & "ResultRole = PartComponent")
     
       Set colFiles = objWMIService.ExecQuery _
        ("ASSOCIATORS OF {Win32_Directory.Name='" & strFolderName & "'} Where " _
            & "ResultClass = CIM_DataFile")
    et ce code permet la recherche des sous dossiers à ce que j'ai compris sur mds

    bon je commence à capter le code qui m'a été proposé par radpat il me semble
    à force ça va rentrer
    alors au début on déclare les variables indispensables pour la suite : objFSO, objFile, objWMIservice
    ensuite, on va lire le fichier texte ligne à ligne tant que on est pas a la fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set objTextFile = objFSO.CreateTextFile("C:\Scripts\Resultat_du_script.txt")
    ça par contre j'ai pas tout compris
    ensuite on indique quels sont les sous dossiers et les fichiers du répertoire en question
    puis : pour chaque fichier dans cette arborescence, si son extension est .mdb, alors on le déplace dans le répertoire que l'on a déclaré au début
    et on fait ça dans chaque sous dossier

    et pour la sub (procédure) que se passe t'il précisément ?

  3. #23
    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 : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    ça par contre j'ai pas tout compris
    Il suffit de traduire : CreateTextFile hum... Qu'est ce que cela peut bien faire ?
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  4. #24
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut premier petit essai
    bon après avoir beaucoup potassé les divers conseils et la doc internet, voili ce que ça peut donner pour le moment
    je suis bien sur ouvert à tout conseil, critique etc...

    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
     
    Dim OFS, MonFichier, Result , liste,
    strTarget = repertoire d’arrivée
     
    'crée la référence du dossier 
    Set OFS = CreateObject("Scripting.FileSystemObject") 
     
    'Obtient le fichier 
    Set MonFichier = OFS.GetFile("c:\fichier.txt") 
     
    'Obtient la lettre du lecteur. 
    Result = MonFichier.Drive 
     
    'Vérifie sont existence 
    If OFS.DriveExist(Result) Then MsgBox "le disque d’arrivée existe" 
    Else end
     
    'vérifie l'existence du fichier liste
    If OFS.FileExist("c:\liste.txt") Then MsgBox "la liste de base de données existe"
    Else end
     
    ‘Ouverture fichier liste pour lecture
    Set objFile = objFSO.OpenTextFile("C:\liste.Txt", ForReading)
     
    ‘Lecture ligne à ligne jusqu’à la fin
    Do Until objFile.AtEndOfStream
     
    ‘on stocke la ligne lue 
       strLine = objFile.ReadLine
     
    on la met dans une variable qui sera utilisée comme nom de dossier
       strFolderName = strLine
    If Not (OFS.FolderExists(strFolderName)) Then  …””allez à la ligne suivante””
     
    ‘on déplace chaque fichier du dossier qui a l’extension .mdb
       For Each File in strFolderName
           If File.Extension = "mdb" Then
              objFSO.MoveFile File, strTarget
           End If
    Next
    Loop

  5. #25
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Attention si tu y vas comme ca, tu ne vas balayer que le répertoire que tu as lu dans ton ton fichier texte.
    Si tu veux le répertoire est ses sous répertoires tu dois reprendre le Sub GetSubFolders(strFolderName) que je t'ai donné dans mon exemple.

    Et dans tes test d'existance, si tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    If OFS.DriveExist(Result) Then MsgBox "le disque d’arrivée existe" 
    Else end
    le programme continue à se dérouler malgré tout, tu devrais faire un truc comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    If OFS.DriveExist(Result) Then MsgBox "le disque d’arrivée existe" 
    Else 
       Msgbox "le disque d’arrivée n'existe pas, fin du scrpt"
       Wscript.quit 
    end
    A++
    Plus tu pédales moins vite, moins t'avances plus vite.

  6. #26
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    Merci de la réponse
    je ne sais pas encore si je vais balayer les sous répertoires, mon tuteur ma demandé de mettre ça en suspens.
    mise à part ça et les structures conditionnelles, est-ce que mon code est bien écrit ? va t-il fonctionner ? j'avoue être déja un petit peu fier du résultat, quand je vois ou j'en étais hier... merci de l'aide

  7. #27
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    bon un peu de nouveau une fois de plus
    mon tuteur m'a dit que c'était pas mal pour un début
    donc en fait... je ne dois finalement pas tester un disque mais un chemin réseau UNC et je ne sais pas comment faire ça en VBS

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ‘Ouverture fichier liste pour lecture
    Set objFile = objFSO.OpenTextFile("C:\liste.Txt", ForReading)
    il ne veut pas du c:\liste.txt, il veut que ce soit un paramètre, donc je pense à une variable (sinon je ne vois po...)

    il veut finalement que je teste les sous dossiers donc je vais effectivement me servir de la sub getsubfolders. mais je me pose une petite question sur le role du code que vous aviez proposé au début du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
       Set objTextFile = objFSO.CreateTextFile("C:\Scripts\Resultat_du_script.txt")
     
       Set colSubfolders = objWMIService.ExecQuery _
        ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
            & "Where AssocClass = Win32_Subdirectory " _
                & "ResultRole = PartComponent")
     
       Set colFiles = objWMIService.ExecQuery _
        ("ASSOCIATORS OF {Win32_Directory.Name='" & strFolderName & "'} Where " _
            & "ResultClass = CIM_DataFile")
    et il faudrait que je boucle à la ligne d'après du fichier texte, au cas ou le répertoire n'existerait pas

    je dois finir mardi, mercredi max, au secours !!!

  8. #28
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    attention à tes commentaires, tu dois mettre des simples quotes '
    If exists AVEC UN "S" à la fin
    strTarget = faut lui donner un nom du repertoire
    ajoute des If aux End If
    tu as oublié le next de ton dernier For each

    tu déclares :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set MonFichier = OFS.GetFile("c:\fichier.txt")
    et après tu testes si il existe ou pas, si il n'existe pas le programme va t'insulter au moment du Set. Ajoute un on error resume next pour que ca passe.

    Attention au on error resume next, tu dois etre certain que le reste de ton programme est correct sinon ca fout la grouille. Donc, à ta place je mets en commentaire les tests d'existance et tant que le reste n'est pas ok, je laisse en commentaires.

    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
     
    Dim OFS, MonFichier, Result , liste
    strTarget = "c:\tu dois mettre un nom de repertoire ici" 'repertoire d’arrivée
     
    'crée la référence du dossier 
    Set OFS = CreateObject("Scripting.FileSystemObject") 
     
    'Obtient le fichier 
    Set MonFichier = OFS.GetFile("c:\fichier.txt") 
     
    'Obtient la lettre du lecteur. 
    Result = MonFichier.Drive 
     
    'Vérifie sont existence 
    If OFS.DriveExists(Result) Then 
    MsgBox "le disque d’arrivée existe" 
    Else 
    WScript.quit
    End If
     
    'vérifie l'existence du fichier liste
    If OFS.FileExists("c:\liste.txt") Then 
    MsgBox "la liste de base de données existe"
    Else 
    WScript.quit
    End If
     
    '‘Ouverture fichier liste pour lecture
    Set objFile = objFSO.OpenTextFile("C:\liste.Txt", ForReading)
     
    '‘Lecture ligne à ligne jusqu’à la fin
    Do Until objFile.AtEndOfStream
     
    '‘on stocke la ligne lue 
       strLine = objFile.ReadLine
     
    'on la met dans une variable qui sera utilisée comme nom de dossier
       strFolderName = strLine
       If Not (OFS.FolderExists(strFolderName)) Then  '…””allez à la ligne suivante””
     
    '‘on déplace chaque fichier du dossier qui a l’extension .mdb
          For Each File in strFolderName
              If File.Extension = "mdb" Then
                 objFSO.MoveFile File, strTarget
              End If
          Next
       End If   
    Loop

    A++
    Plus tu pédales moins vite, moins t'avances plus vite.

  9. #29
    Membre averti
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Points : 341
    Points
    341
    Par défaut
    Citation Envoyé par julien0709 Voir le message
    il ne veut pas du c:\liste.txt, il veut que ce soit un paramètre, donc je pense à une variable (sinon je ne vois po...)
    a mon avis ca n'a aucun intéret....mais ca donnerai ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set objFile = objFSO.OpenTextFile(Wscript.Arguments.Item(0)
    , ForReading)
    Plus tu pédales moins vite, moins t'avances plus vite.

  10. #30
    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 : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    If Not (OFS.FolderExists(strFolderName)) Then  …””allez à la ligne suivante””
     
    ‘on déplace chaque fichier du dossier qui a l’extension .mdb
       For Each File in strFolderName
           If File.Extension = "mdb" Then
              objFSO.MoveFile File, strTarget
           End If
    Next
    Tu va être ennuyé si tu fais cela.
    Il ne faut pas traiter le cas si n'existe pas alors on passe à la suite, mais en fait dire : si il existe je fais quelque chose sinon rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Do Until objFile.AtEndOfStream
    '........................... le code que tu as avant le if
    If (OFS.FolderExists(strFolderName)) Thenon déplace chaque fichier du dossier qui a l’extension .mdb
         For Each File in strFolderName
              If File.Extension = "mdb" Then
                objFSO.MoveFile File, strTarget
              End If
         Next
    End If
    Loop
    De cette manière si le répertoire existe tu feras ce que tu dois faire et s'il n'existe pas, comme il n'y a pas de else, l'interpréteur du script n'entres pas dans la condition.
    Donc si le répertoire n'existe pas tu vas directement au End If. Et donc juste après celui tu fais le loop pour boucler. Alors on recomence le test du do until, et comme tu n'est pas à la fin du fichier tu recommence la boucle.
    Donc tu execute ta première instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strLine = objFile.ReadLine
    Celle-ci te permet non seulement de lire la ligne en cours, mais en plus, après avoir lu la ligne, un curseur (que tu ne peux pas manipuler directement) se place dans le fichier à la ligne suivante. Et donc lorsque tu referas après cette commande au prochain tour de boucle, tu liras la ligne suivante, et ainsi de suite jusqu'à la fin du fichier.

    Amuses à créer un fichier de 5 lignes et applique ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set OFS = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("C:\liste.Txt", ForReading)
    msgbox objFile.ReadLine
    msgbox objFile.ReadLine
    msgbox objFile.ReadLine
    msgbox objFile.ReadLine
    msgbox objFile.ReadLine
    Tu verras qu'il te parcours et t'affiches toutes les lignes sans boucle
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  11. #31
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Points : 18
    Points
    18
    Par défaut
    petites explication. mon code est celui la maintenant, et je ne pense pas qu'il y ait beaucoup de retouches à faire (du moins j'espère)

    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
     
     
    On Error Resume Next
    liste = c:\liste.txt
    strComputer = "."  'que mettre ???
    strTarget = "Chemin UNC"
    Const ForReading = 1
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
     
    If OFS.FileExists("liste") Then 
    MsgBox "la liste de base de données existe"
    Else 
    WScript.quit
    End If
     
    Set objFile = objFSO.OpenTextFile("liste", ForReading)
     
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    'c pour quoi précisément ?
     
    Do Until objFile.AtEndOfStream
       strFolderName = objFile.ReadLine
     
       Set objTextFile = objFSO.CreateTextFile("C:\Scripts\Resultat_du_script.txt")
    ' je ne comprends pas vraiment le but de cette manoeuvre
     
       Set colSubfolders = objWMIService.ExecQuery _
        ("Associators of {Win32_Directory.Name='" & strFolderName & "'} " _
            & "Where AssocClass = Win32_Subdirectory " _
                & "ResultRole = PartComponent") 
    'ça c'est pour faire la liste des sous dossiers
     
       Set colFiles = objWMIService.ExecQuery _
        ("ASSOCIATORS OF {Win32_Directory.Name='" & strFolderName & "'} Where " _
            & "ResultClass = CIM_DataFile")
    ' et la c pour les fichiers dans les sous dossiers
     
       For Each objFile in colFiles
           If objFile.Extension = "mdb" Then
              objTextFile.WriteLine objFile.FileName & " Ok"
              objFSO.MoveFile objFile.Name, strTarget
           End If
       Next
     
       For Each objFolder in colSubfolders
           GetSubFolders strFolderName
       Next
    Loop
     
    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
     
        Set colFiles = objWMIService.ExecQuery _
            ("ASSOCIATORS OF {Win32_Directory.Name='" & strFolderName & "'} Where " _
                & "ResultClass = CIM_DataFile")
     
        For Each objFile in colFiles
            If objFile.Extension = "mdb" Then
                objTextFile.WriteLine objFile.FileName & " Ok" 
                objFSO.MoveFile objFile.Name, strTarget
            End If
        Next
     
            GetSubFolders strFolderName
        Next
    End Sub

Discussions similaires

  1. Déplacement dossiers en VBS avec variable user
    Par enermax31 dans le forum VBScript
    Réponses: 2
    Dernier message: 12/09/2013, 15h00
  2. [OL-2007] Extraction pièce jointe dans word et déplacement dossier
    Par th3sorrow dans le forum VBA Outlook
    Réponses: 4
    Dernier message: 09/05/2012, 15h30
  3. Déplacement dossier sharepoint
    Par skud07 dans le forum SharePoint
    Réponses: 2
    Dernier message: 02/02/2009, 09h43

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