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 :

Copie dossier selon exception


Sujet :

VBScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut Copie dossier selon exception
    Bonsoir,

    J'ai un dossier principal qui contient plusieurs sous-dossiers.

    Je souhaite faire une copie du dossier principal sans les fichiers avec l'extension .doc et . xls

    quelle est selon vous la méthode la plus rapide?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Points : 1 111
    Points
    1 111
    Par défaut
    je pense que le plus simple c'est de faire une copie intégrale puis de faire un delete des fichiers doc avec la commande delete /S *.doc (le commutateur /s indique que ca va parcourir les sous-dossiers).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 21
    Points : 20
    Points
    20
    Par défaut
    Le plus simple j'suis du même avis que Flamby.

    Par contre, pas sure que ça soit bien optimisé, si tu as beaucoup de .doc et .xls, et de taille importante, il vaut peut être mieux recrée un dossier, puis passer les fichiers un par un et copier si ils ne finissent pas par ".xls" ou ".doc".

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par keuloud Voir le message
    Le plus simple j'suis du même avis que Flamby.

    Par contre, pas sure que ça soit bien optimisé, si tu as beaucoup de .doc et .xls, et de taille importante, il vaut peut être mieux recrée un dossier, puis passer les fichiers un par un et copier si ils ne finissent pas par ".xls" ou ".doc".
    oui justement. Certains sont de grandes tailles.

    j'essaie d'utiliser la récursivité . J'ai bien tous les fichiers et les dossiers que je dois copier mais pour le moment je n'arrive pas à avoir la même l'arborescence.
    En effet tous mes sous-dossiers se mettent à la racine du dossier que je crée...



    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
    strFolder = "C:\test"
     
    Dim oFlde,ft
     
    Const ForWriting = 2
     
    set objFSO = createobject("Scripting.FileSystemObject")
     
    GetFiles strFolder
     
    sub GetFiles(byval strDirectory)
    	set objFolder = objFSO.GetFolder(strDirectory)
    	for each objFile in objFolder.Files
                 If objFile.Type = "Fichier txt" then 
                     (je passe mon tour)
                    else
                   st1 = "C:\Users\M01\Desktop\Backup\"
                   st2 = st1 & objFolder.Name                     
                   st3 = st2 & "\" & objFile.Name  
     
     
                     if objFSO.FolderExists(st2) then 
     
                        else
                      Set oFlde = objFSO.CreateFolder(st2)
                     End If
                   Set ft = objFSO.OpenTextFile(st3, ForWriting,true)
     
                 End If
    	next	
    	for each objFolder in objFolder.SubFolders
                 		GetFiles objFolder.Path
    	next
    end sub
    Voila ou j'en suis pour le moment.

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    ton code ne correspond pas à ta description ... je ne vois aucune instruction de copie de fichier ...
    et pourquoi créé tu un fichier texte ??

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Voila ou j'en suis

    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
    strFolder = "C:\test"
    Dim oFlde,cop
     
    set objFSO = createobject("Scripting.FileSystemObject")
     
    GetFiles strFolder
     
    sub GetFiles(byval strDirectory)
    	set objFolder = objFSO.GetFolder(strDirectory)
    	for each objFile in objFolder.Files
                    wscript.echo objFile.Type
                 If objFile.Type = "Document texte" then 
     
                    else
                   st1 = "C:\Users\M01\Desktop\Backup\"
                   st2 = st1 & objFolder.Name                     
                   st3 = st2 & "\" & objFile.Name  
     
     
                     if objFSO.FolderExists(st2) then 
     
                        else
                      Set oFlde = objFSO.CreateFolder(st2)
                      End If
     
                   objFSO.CopyFile objFile.Path,st3,True
     
     
                 End If
    	next	
    	for each objFolder in objFolder.SubFolders
                     wscript.echo objFolder.Path
    		GetFiles objFolder.Path
    	next
    end sub
    je commence en essayant de copier le contenu de "C:\test" dans le dossier backup en omettant les fichiers textes...

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    il y as un problème dans le calcul de ton répertoire de destination, tu oublie les sous répertoires ...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par bbil Voir le message
    il y as un problème dans le calcul de ton répertoire de destination, tu oublie les sous répertoires ...
    oui je vois bien mais je n'arrive pas à récupérer le chemin exact...

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Tu peu donner ce répertoire en paramètre dans ton code :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub GetFiles(ByVal strDirectory, ByVal strSousRep)
    ...
                 st1 = "d:\tmp\Backup"
                   st2 = st1 & strSousRep
                   st3 = st2 & "\" & objFile.Name
    ...
      For Each objFolder In objFolder.SubFolders
            GetFiles objFolder.Path, strSousRep & "\" & objFolder.Name
        Next
    ...

    pour créer le répertoire de destination ton code cause problème lorsqu'un sous répertoire ne comporte pas de fichier mais seulement des sous-dossier, utilise le code extrait de la faq :

    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
     
    (..)
                     If Not objFSO.FolderExists(st2) Then
                         CreerRep st2
                      End If
     
                   objFSO.CopyFile objFile.Path, st3, True
    (...)
     
    Sub CreerRep(Chemin)
        If Not objFSO.FolderExists(Chemin) Then
            CreerRep (objFSO.GetParentFolderName(Chemin))
            objFSO.CreateFolder (Chemin)
        End If
    End Sub

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Merci cela fonctionne.
    Maintenant je vais essayer de comprendre le code...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    petite difficulté pour éviter de copier les Fichiers xls et doc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    If Not objFile.Type = "Feuille de calcul Microsoft Excel" OR objFile.Type = "Microsoft Office Word" then 
    ....
    cela ne fonctionne pas ?

  12. #12
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Fonctionne pas ..?

    un "Not" en trop ? ou Manquant ?

    dans ton code ton "Not" s'applique sur Excel mais pas word

    rajoute un Not ou des parenthèses...

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    948
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 948
    Points : 1 111
    Points
    1 111
    Par défaut
    Sinon il me semble qu'il existe un objFile.Extension qui te donnera directement l'extension, ca évite les erreurs liées aux fautes de frappe dans le type du fichier.

    De plus, "Feuille de calcul Microsoft Excel", ben ca m'étonnerait que l'ordinateur renvoie ca si il a une version anglaise de windows, donc le script est pas très robuste.

    Une astuce supplémentaire, tu peux mettre des parenthèses dans tes opérations booléennes, pour etre sur qu'elles s'executent comme toi tu le penses, sans avoir à réfléchir à l'ordre dans lequel ce sera interprété.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    bonjour,

    objFile.Extension n'existe pas pas chez moi malheureusement.

    j'ai raisonné autrement. Au lieu de ne pas copier le fichier quand c'est un doc ou xls , je le copie quand c'est un fichier avec une extension précise.

    Merci pour l'aide.

Discussions similaires

  1. [batch] copie dossier + fichiers
    Par mathieu_r dans le forum Windows
    Réponses: 7
    Dernier message: 22/03/2007, 14h42
  2. [2003 Server] Lenteur d'exploration des dossiers selon le type d'accès
    Par Bob Langlade dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 20/10/2006, 17h30
  3. parcours récursif de dossiers selon un niveau un niveau de profondeur
    Par terminatorsk8 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/08/2006, 20h14
  4. Copie d'une exception
    Par julien.sagnard dans le forum C++
    Réponses: 6
    Dernier message: 09/03/2006, 16h26
  5. Supprimer des sous-dossiers selon des critères
    Par Dertron dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 18/01/2006, 14h33

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