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

Vue hybride

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut déplacement dossiers VBS
    Bonjour à tous
    je dois réaliser un script VB afin de déplacer des dossiers d'un disque dur à un autre (demande de mon chef)
    Ces dossiers sont listés sur une feuille de calcul excel et ils sont nombreux (+ de 1200)
    Je ne connais pas grand chose au VBS, mais je me suis déja penché sur le problème, et j'ai commencé à rédiger un petit algorithme.

    Il faudrait que j'arrive à obtenir le nom des dossiers via le fichier excel en passant par le code VBS...

    j'aimerais savoir quelles sont les éléments indispensables qui doivent figurer dans mon code, sachant que je dois tout vérifier à chaque procédure

    Je nage un peu

    Merci de votre aide

    Julien

  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
    Pour piloter ton fichier excel et récupérer les informations nécessaires, tu dois faire du VBA dans un script VBS.
    Pour tout ce qui est commande pour récupérer des infos sur ue cellule, ou faire autre chose, tu trouveras plus d'info dans le forum VBA.
    Pour créer l'objet excel qui est nécessaire avant de pouvoir ouvrir un classeur et utiliser les méthode VBA : fait une recherche sur ce forum avec en mot clé VBA et/ou Excel, il y a déjà eu des sujets la dessus avec des exemples.
    Pour déplacer des répertoires, la FAQ VBScript pourra t'aider :
    http://vb.developpez.com/faqvbs/?pag...#fsoMoveFolder
    Comment déplacer un répertoire et son contenu ?

    auteurs : Tofalu, bbil

    Il est possible d'utiliser deux techniques différentes pour déplacer un dossier :
    Depuis le FSO directement grâce à la méthode MoveFolder
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim oFSO
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    oFSO.MoveFolder "c:\tmp2","c:\tmp3"
    où en utilisant la méthode move de l'objet Folder
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim oFSO,oFld
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    set oFld = oFSO.GetFolder("c:\tmp2")
    oFld.Move "C:\tmp3"

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut
    Citation Envoyé par ced600 Voir le message
    Pour piloter ton fichier excel et récupérer les informations nécessaires, tu dois faire du VBA dans un script VBS.
    Pour tout ce qui est commande pour récupérer des infos sur ue cellule, ou faire autre chose, tu trouveras plus d'info dans le forum VBA.
    Pour créer l'objet excel qui est nécessaire avant de pouvoir ouvrir un classeur et utiliser les méthode VBA : fait une recherche sur ce forum avec en mot clé VBA et/ou Excel, il y a déjà eu des sujets la dessus avec des exemples.
    Pour déplacer des répertoires, la FAQ VBScript pourra t'aider :
    http://vb.developpez.com/faqvbs/?pag...#fsoMoveFolder
    Merci de votre aide
    Après m'être penché un peu plus précisément sur le problème, je vais me diriger vers un copier coller de la liste sous excel, pour la mettre dans un fichier texte, car j'ai pu voir les possibilités de VBS avec ce type de fichier.

    Mon algorithme ressemblerait à :

    obtenir le nombre de lignes d'un fichier texte
    --> afin de pouvoir faire un 'for' après

    lire le contenu d'un fichier texte
    --> ligne à ligne

    extraire une partie d'une chaîne
    --> j'extrais la lettre du disque dur

    tester l'existence d'un disque
    --> avec la lettre que j'ai stocké juste avant

    tester l'existence d'un répertoire
    --> le répertoire que je veux déplacer

    tester l'existence d'un disque
    --> la ou je vais déplacer

    déplacer un répertoire et son contenu
    --> tout est dit

    qu'en pensez vous sur le principe ?

  4. #4
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    Salut,

    a premiere vue ton algo est correct.
    Pour faire bien plutot que dire :

    Citation Envoyé par julien0709 Voir le message
    obtenir le nombre de lignes d'un fichier texte
    --> afin de pouvoir faire un 'for' après
    tu peux dire :
    "Lire les lignes du fichier tant qu'on est pas arrivé en fin de fichier"

    ce qui donnerait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Const ForReading = 1
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("C:\Scripts\Mon_Fichier.Txt", ForReading)
     
    Do Until objFile.AtEndOfStream
        strLine = objFile.ReadLine
        Wscript.Echo strLine
    Loop
     
    objFile.Close
    A++

  5. #5
    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
    je vais me diriger vers un copier coller de la liste sous excel, pour la mettre dans un fichier texte
    Comme tu veux mais c'est faisable assez simplement avec du VBA d'obtenir la liste du fichier excel.

    Mais penchons nous un peu sur ton algo :
    obtenir le nombre de lignes d'un fichier texte
    --> afin de pouvoir faire un 'for' après
    Inutile, la boucle foreach utilisable en VBS te permet de parcours un tableau, une collection, un dictionnaire, ou tout autres types de conteneurs, sans en connaitre la taille. Mais il est vrai que dans le cas des fichiers textes tu ne peux que récupérer qu'une ligne, ou tout le contenu dans une variable de type chaine de caractère. Donc pas de collection, tableaux, ...
    N'empêche toujours inutile, car tu as une propriété AtEndOfStream fourni par l'objet FilesystemObject que tu ne vas pas arrêter d'utiliser pour ce que tu veux faire.
    Il suffit de regarder la FAQ pour l'exemple : http://vb.developpez.com/faqvbs/?pag...#fsoLitFichier

    lire le contenu d'un fichier texte
    --> ligne à ligne
    Regarde le liens précédent.

    extraire une partie d'une chaîne
    --> j'extrais la lettre du disque dur
    Je te propose d'aller voir ici pour savoir comment découper une chaine de caractères :http://vb.developpez.com/faqvbs/?page=II.6 Ho mais c'est encore la FAQ VBScript, ils ont pensés à tout ce qui ont fait cela

    tester l'existence d'un disque
    --> avec la lettre que j'ai stocké juste avant
    La il faut s'amuser avec WMI :
    http://msdn.microsoft.com/en-us/libr...92(VS.85).aspx
    Inspire toi de l'exemple du site suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colItems = objWMIService.ExecQuery("Select * From Win32_LogicalDisk Where DeviceID = 'A:'")
     
    For Each objItem in colItems
        intFreeSpace = objItem.FreeSpace
        If IsNull(intFreeSpace) Then
            Wscript.Echo "There is no disk in the floppy drive."
        Else
            Wscript.Echo "There is a disk in the floppy drive."
        End If
    Next
    tester l'existence d'un répertoire
    --> le répertoire que je veux déplacer
    Regarde le lien de mon premier message, la FAQ te propose encore la solution.
    Elle t'explique aussi comment fonctionne WMI, et donne quelques exemples. Mais le mieux reste le lien MSDN que je t'ai fournis.

    tester l'existence d'un disque
    --> la ou je vais déplacer

    déplacer un répertoire et son contenu
    --> tout est dit
    Bah je t'ai passé les liens, tu n'as qu'à refaire ce que tu auras fait plus haut.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 53
    Par défaut
    Merci à tous pour votre aide
    mon algo a évolué

    je vais d'abor m'occuper de la vérif de l'emplacement d'arrivée, et si le fichier texte existe

    ensuite mon algo serait :

    ouverture fichier texte
    lire ligne 1 (qui donc est un nom de répertoire)
    on vérifie si ce répertoire existe
    on recherche les bases access de ce répertoire
    on regarde dans les sous dossiers si il y a des bases access aussi
    on déplace les bases de données trouvées
    on boucle pour toutes les lignes du fichier texte

    car il parait que l'algo présenté auparavant était pourri !! (citation de mon tuteur !!)

    sinon j'ai un problème avec les variables, je ne sais pas comment je vais devoir les gérer...

    Merci de votre aide

  7. #7
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Août 2007
    Messages : 302
    Par défaut
    Citation Envoyé par julien0709 Voir le message
    on recherche les bases access de ce répertoire
    on regarde dans les sous dossiers si il y a des bases access aussi
    Tu ouvres ton fichier texte et tu lis ligne à ligne (regarde mon 1er post), puis à l'aide de l'article How Can I Get a List of All the PDF Files in a Folder and Its Subfolders? tu extrais tes fichiers
    Ok, tu veux des .MDB, ici c'est du .PDF, mais ce ne devrait pas être compliqué

    http://www.microsoft.com/technet/scr...7/hey0608.mspx

    et puis plutot que d'afficher le fichier texte, on va le déplacer :

    remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        For Each objFile in colFiles
            If objFile.Extension = "mdb" Then
                objTextFile.WriteLine objFile.FileName 
            End If
        Next
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        strTarget = "C:\Nom_de_mon_repertoire\"
        For Each objFile in colFiles
            If objFile.Extension = "mdb" Then
                objTextFile.WriteLine objFile.FileName 
                objFSO.MoveFile objFile.Name, strTarget
            End If
        Next
    puis tu lis la ligne suivante jusqu'à la fin de ton fichier.

    ...pas trop pourri à priori

    A++

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