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?
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?
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).
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...
Voila ou j'en suis pour le moment.
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
ton code ne correspond pas à ta description ... je ne vois aucune instruction de copie de fichier ...
et pourquoi créé tu un fichier texte ??
Voila ou j'en suis
je commence en essayant de copier le contenu de "C:\test" dans le dossier backup en omettant les fichiers textes...
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
il y as un problème dans le calcul de ton répertoire de destination, tu oublie les sous répertoires ...
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
Merci cela fonctionne.
Maintenant je vais essayer de comprendre le code...
Bonjour,
petite difficulté pour éviter de copier les Fichiers xls et doc.
cela ne fonctionne pas ?
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 ....
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...
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é.
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager