OVH Cloud OVH Cloud

copier via script

9 réponses
Avatar
norbert
bonjour,

j' ai besoin d' aide pour un script en ligne de commande (xp)
comment copier en les rassemblant certains fichiers par exemple "*.xls"
contenus dans un repertoire avec ses sous-repertoires vers un autre et
unique repertoire sans sous-repertoires
merci

norbert

9 réponses

Avatar
Fred
Dans son message
norbert nous dit :

bonjour,

j' ai besoin d' aide pour un script en ligne de commande (xp)
comment copier en les rassemblant certains fichiers par exemple
"*.xls" contenus dans un repertoire avec ses sous-repertoires vers un
autre et unique repertoire sans sous-repertoires
merci


Bonsoir,
Quelque chose dans ce genre :

Set oFSO=CreateObject("Scripting.FileSystemObject")
SrcFolder="C:Source"
DestFolder="C:Destination"

Sub Copier(oFolder)
For Each oFile in oFolder.Files
If UCase(Right(oFile.Name, 4))=".XLS" Then
oFile.Copy DestFolder & "" & oFile.Name
End If
Next
For Each oSubFolder in oFolder.Folders
Copier oSubFolder
Next
End Sub

Copier oFSO.GetFolder(SrcFolder)

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
norbert
hello Fred,

merci pour la réponse
j' ai bien essayé mais ça ne marche pas:

Erreur d'exécution Microsoft VBScript: Cet objet ne gère pas cette propriété
ou cette méthode:
'oFolder.Folders'

merci

norbert


"Fred" a écrit dans le message de news:

Dans son message
norbert nous dit :

bonjour,

j' ai besoin d' aide pour un script en ligne de commande (xp)
comment copier en les rassemblant certains fichiers par exemple
"*.xls" contenus dans un repertoire avec ses sous-repertoires vers un
autre et unique repertoire sans sous-repertoires
merci


Bonsoir,
Quelque chose dans ce genre :

Set oFSO=CreateObject("Scripting.FileSystemObject")
SrcFolder="C:Source"
DestFolder="C:Destination"

Sub Copier(oFolder)
For Each oFile in oFolder.Files
If UCase(Right(oFile.Name, 4))=".XLS" Then
oFile.Copy DestFolder & "" & oFile.Name
End If
Next
For Each oSubFolder in oFolder.Folders
Copier oSubFolder
Next
End Sub

Copier oFSO.GetFolder(SrcFolder)

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT




Avatar
Fred
Dans son message
norbert nous dit :

"Fred" a écrit dans le message de news:

Dans son message
norbert nous dit :

bonjour,

j' ai besoin d' aide pour un script en ligne de commande (xp)
comment copier en les rassemblant certains fichiers par exemple
"*.xls" contenus dans un repertoire avec ses sous-repertoires vers
un autre et unique repertoire sans sous-repertoires
merci


Bonsoir,
Quelque chose dans ce genre :

Set oFSO=CreateObject("Scripting.FileSystemObject")
SrcFolder="C:Source"
DestFolder="C:Destination"

Sub Copier(oFolder)
For Each oFile in oFolder.Files
If UCase(Right(oFile.Name, 4))=".XLS" Then
oFile.Copy DestFolder & "" & oFile.Name
End If
Next
For Each oSubFolder in oFolder.Folders
Copier oSubFolder
Next
End Sub

Copier oFSO.GetFolder(SrcFolder)

hello Fred,


merci pour la réponse
j' ai bien essayé mais ça ne marche pas:

Erreur d'exécution Microsoft VBScript: Cet objet ne gère pas cette
propriété ou cette méthode:
'oFolder.Folders'



Bonsoir,
Oui, exact, c'est oFolder.SubFolders
Tous les détails sont ici :

http://msdn.microsoft.com/library/en-us/script56/html/vtoriMicrosoftWindowsScriptTechnologies.asp

(http://minilien.fr/a0k08t)


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT



Avatar
Fred
Dans son message
norbert nous dit :

[...]

Set oFSO=CreateObject("Scripting.FileSystemObject")
SrcFolder="C:Source"
DestFolder="C:Destination"

Sub Copier(oFolder)
For Each oFile in oFolder.Files
If UCase(Right(oFile.Name, 4))=".XLS" Then
oFile.Copy DestFolder & "" & oFile.Name
End If
Next
For Each oSubFolder in oFolder.Folders
Copier oSubFolder
Next
End Sub

Copier oFSO.GetFolder(SrcFolder)




Pour compléter, il faut savoir comment gérer les doublons. Tu peux avoir
le même nom de fichier dans deux dossiers différents.
J'ai aussi omis le fait qu'un nom de fichier peut faire moins de 4
caractères.
Tout ceci étant corrigé ci-dessous je pense :
8<----------------------------------------------------------
Set oFSO=CreateObject("Scripting.FileSystemObject")
SrcFolder="C:Source"
DestFolder="C:Destination"

Sub Copier(oFolder)
For Each oFile in oFolder.Files
If Len(oFile.Name)>4 Then
If UCase(Right(oFile.Name, 4))=".XLS" Then
sFileName = Left(oFile.Name, Len(oFile.Name) - 4)
sIndex = ""
iIndex = 0
While oFSO.FileExists(DestFolder & "" & sFileName &
sIndex & ".xls")
iIndex = iIndex + 1
sIndex = " (" & iIndex & ")"
Wend
oFile.Copy DestFolder & "" & sFileName & sIndex &
".xls"
End If
End If
Next
For Each oSubFolder in oFolder.SubFolders
Copier oSubFolder
Next
End Sub

Copier oFSO.GetFolder(SrcFolder)
8<----------------------------------------------------------

Avec ça, si deux fichiers (ou plus) ont le même nom, ils seront renommés
avec des indices (1), (2), etc ...
Voilà, j'ai bien relu mais si une erreur m'a échappé, je repasse plus
tard.
Tu as juste à modifier les variables SrcFolder et DestFolder au début du
script (ne mets pas de backslash à la fin).


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT


Avatar
norbert
OK.
Plus de messages d' erreurs.
Mais... aucun fichier copié.
Norbert

"Fred" a écrit dans le message de news:
uiI%
Dans son message
norbert nous dit :

[...]

Set oFSO=CreateObject("Scripting.FileSystemObject")
SrcFolder="C:Source"
DestFolder="C:Destination"

Sub Copier(oFolder)
For Each oFile in oFolder.Files
If UCase(Right(oFile.Name, 4))=".XLS" Then
oFile.Copy DestFolder & "" & oFile.Name
End If
Next
For Each oSubFolder in oFolder.Folders
Copier oSubFolder
Next
End Sub

Copier oFSO.GetFolder(SrcFolder)




Pour compléter, il faut savoir comment gérer les doublons. Tu peux avoir
le même nom de fichier dans deux dossiers différents.
J'ai aussi omis le fait qu'un nom de fichier peut faire moins de 4
caractères.
Tout ceci étant corrigé ci-dessous je pense :
8<----------------------------------------------------------
Set oFSO=CreateObject("Scripting.FileSystemObject")
SrcFolder="C:Source"
DestFolder="C:Destination"

Sub Copier(oFolder)
For Each oFile in oFolder.Files
If Len(oFile.Name)>4 Then
If UCase(Right(oFile.Name, 4))=".XLS" Then
sFileName = Left(oFile.Name, Len(oFile.Name) - 4)
sIndex = ""
iIndex = 0
While oFSO.FileExists(DestFolder & "" & sFileName & sIndex
& ".xls")
iIndex = iIndex + 1
sIndex = " (" & iIndex & ")"
Wend
oFile.Copy DestFolder & "" & sFileName & sIndex & ".xls"
End If
End If
Next
For Each oSubFolder in oFolder.SubFolders
Copier oSubFolder
Next
End Sub

Copier oFSO.GetFolder(SrcFolder)
8<----------------------------------------------------------

Avec ça, si deux fichiers (ou plus) ont le même nom, ils seront renommés
avec des indices (1), (2), etc ...
Voilà, j'ai bien relu mais si une erreur m'a échappé, je repasse plus
tard.
Tu as juste à modifier les variables SrcFolder et DestFolder au début du
script (ne mets pas de backslash à la fin).


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT





Avatar
Fred
Dans son message
norbert nous dit :

OK.
Plus de messages d' erreurs.
Mais... aucun fichier copié.
Norbert


Bonsoir,
Je viens de tester sur une petite arborescence créée pour la cause.
Cela fonctionne bien chez moi.

Tu as bien modifié les deux lignes ?
8<----------------
SrcFolder="C:Source"
DestFolder="C:Destination"
8<----------------

Tu n'as pas oublié la dernière ligne ?
8<----------------
Copier oFSO.GetFolder(SrcFolder)
8<----------------


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
COERCITAS
Salut,

Juste un rapide message pour remercier Fred pour ses efforts, incroyable
qu'une personne clairement aidée et qui se trompe dans l'utilisation de
l'aide ne prenne même pas 5 minutes pour remercier.

Personne ne s'attend vraiment à ce que tout le monde comprenne rapidement le
script ou morceau de script envoyé donc il n'y aura pas de honte à préciser
que le bout de code ne marche pas chez soi car on ne l'a pas adapté à son
cas de figure mais il faut se mettre à la place de la personne qui prend de
son temps personnel pour aider, elle n'a d'autre paiement que les
remerciements de la personne aidée.

4 jours sans réponse de la part de Norbert, on peut estimer qu'il n'a pas
songé à modifier le script pour fonctionner avec son environnement et que le
dernier message de Fred lui a permis de résoudre cette ultime enigme. Le
contrecoup malheureux est que maintenant, plusieurs personnes pourront
partir du principe que Norbert n'est pas digne de réponse...

Je ne suis ni prof de vie ni chasseur de lézard mais quand on aide
gratuitement, un simple "merci" ne serait pas indigne.

Cordialement.


"Fred" a écrit dans le message de news:

Dans son message
norbert nous dit :

OK.
Plus de messages d' erreurs.
Mais... aucun fichier copié.
Norbert


Bonsoir,
Je viens de tester sur une petite arborescence créée pour la cause.
Cela fonctionne bien chez moi.

Tu as bien modifié les deux lignes ?
8<----------------
SrcFolder="C:Source"
DestFolder="C:Destination"
8<----------------

Tu n'as pas oublié la dernière ligne ?
8<----------------
Copier oFSO.GetFolder(SrcFolder)
8<----------------


--
Fred
http://www.cerbermail.com/?3kA6ftaCvT




Avatar
Fred
Dans le message:e%,
COERCITAS écrit:
Salut,

Juste un rapide message pour remercier Fred pour ses efforts,
incroyable qu'une personne clairement aidée et qui se trompe dans
l'utilisation de l'aide ne prenne même pas 5 minutes pour remercier.

Personne ne s'attend vraiment à ce que tout le monde comprenne
rapidement le script ou morceau de script envoyé donc il n'y aura pas
de honte à préciser que le bout de code ne marche pas chez soi car on
ne l'a pas adapté à son cas de figure mais il faut se mettre à la
place de la personne qui prend de son temps personnel pour aider,
elle n'a d'autre paiement que les remerciements de la personne aidée.

4 jours sans réponse de la part de Norbert, on peut estimer qu'il n'a
pas songé à modifier le script pour fonctionner avec son
environnement et que le dernier message de Fred lui a permis de
résoudre cette ultime enigme. Le contrecoup malheureux est que
maintenant, plusieurs personnes pourront partir du principe que
Norbert n'est pas digne de réponse...

Je ne suis ni prof de vie ni chasseur de lézard mais quand on aide
gratuitement, un simple "merci" ne serait pas indigne.

Cordialement.



Bonjour,
Merci pour ces remerciements :-)
Norbert a reçu une aide sur le forum xp qui le satisfaisait mieux.
(xxcopy que je ne connaissais pas d'ailleurs).
A sa décharge, j'avoue que j'ai peut-être mal ciblé ce qu'il voulait.
Sur le forum scripting, il me paraissais normal de donner une piste de
recherche sous forme de script. Mais visiblement, il ne connaissait pas
assez vbs pour l'exploiter pleinement, et il cherchait un outil "clé en
main".
Ceci dit, un petit bout de script posté peut toujours servir à
quelqu'un, on retrouve souvent les mêmes principes :-)

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
COERCITAS
Salut Fred et merci pour ta réaction,

Il est très noble de ta part de réagir de la sorte mais je maintiens ce que
j'ai dit, remercier n'est pas franchement optionnel sur un forum libre et
gratuit.

Bref, je n'espère même plus changer le monde, j'aimerais juste modifier le
mien :)


Cordialement.

"Fred" a écrit dans le message de news:
#
Dans le message:e%,
COERCITAS écrit:
Salut,

Juste un rapide message pour remercier Fred pour ses efforts,
incroyable qu'une personne clairement aidée et qui se trompe dans
l'utilisation de l'aide ne prenne même pas 5 minutes pour remercier.

Personne ne s'attend vraiment à ce que tout le monde comprenne
rapidement le script ou morceau de script envoyé donc il n'y aura pas
de honte à préciser que le bout de code ne marche pas chez soi car on
ne l'a pas adapté à son cas de figure mais il faut se mettre à la
place de la personne qui prend de son temps personnel pour aider,
elle n'a d'autre paiement que les remerciements de la personne aidée.

4 jours sans réponse de la part de Norbert, on peut estimer qu'il n'a
pas songé à modifier le script pour fonctionner avec son
environnement et que le dernier message de Fred lui a permis de
résoudre cette ultime enigme. Le contrecoup malheureux est que
maintenant, plusieurs personnes pourront partir du principe que
Norbert n'est pas digne de réponse...

Je ne suis ni prof de vie ni chasseur de lézard mais quand on aide
gratuitement, un simple "merci" ne serait pas indigne.

Cordialement.



Bonjour,
Merci pour ces remerciements :-)
Norbert a reçu une aide sur le forum xp qui le satisfaisait mieux.
(xxcopy que je ne connaissais pas d'ailleurs).
A sa décharge, j'avoue que j'ai peut-être mal ciblé ce qu'il voulait.
Sur le forum scripting, il me paraissais normal de donner une piste de
recherche sous forme de script. Mais visiblement, il ne connaissait pas
assez vbs pour l'exploiter pleinement, et il cherchait un outil "clé en
main".
Ceci dit, un petit bout de script posté peut toujours servir à
quelqu'un, on retrouve souvent les mêmes principes :-)

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT