Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vbs xcopy

4 réponses
Avatar
dasf
Bonjour,

Je fais un script en vbs qui lance xcopy.



entree = "C:\test1"
sortie = "C:\test2"
set fso = CreateObject("Scripting.FileSystemObject")
set shl = CreateObject("wscript.shell")
shl.run "command /c xcopy/s "& entree & sortie,0,true

Cela ne fonctionne pas alors que si je met :


set fso = CreateObject("Scripting.FileSystemObject")
set shl = CreateObject("wscript.shell")
shl.run "command /c xcopy/s C:test1 C:test2

Ca fonctionne ... qqn voit-il une erreur ?

4 réponses

Avatar
mdnews
Tue, 8 Sep 2009 00:01:57 -0700 (PDT), dasf >>

Bonjour,

Je fais un script en vbs qui lance xcopy.



entree = "C:test1"
sortie = "C:test2"
set fso = CreateObject("Scripting.FileSystemObject")
set shl = CreateObject("wscript.shell")
shl.run "command /c xcopy/s "& entree & sortie,0,true



Je pense que le système reçoit:
"command /c xcopy/s C:test1C:test2"
^

A ma connaissance le système n'ajoute pas de lui-même les espaces

Donc faire soit
entree = "c:test1 "
soit
"command /c xcopy/s "& entree & " " & sortie,0,true

Cela ne fonctionne pas alors que si je met :


set fso = CreateObject("Scripting.FileSystemObject")
set shl = CreateObject("wscript.shell")
shl.run "command /c xcopy/s C:test1 C:test2

Ca fonctionne ... qqn voit-il une erreur ?


Avatar
dasf
On 8 sep, 09:44, mdnews wrote:
Tue, 8 Sep 2009 00:01:57 -0700 (PDT), dasf >>

>Bonjour,

>Je fais un script en vbs qui lance xcopy.

>entree = "C:test1"
>sortie = "C:test2"
>set fso = CreateObject("Scripting.FileSystemObject")
>set shl = CreateObject("wscript.shell")
>shl.run "command /c xcopy/s "& entree & sortie,0,true

Je pense que le système reçoit:
        "command /c xcopy/s C:test1C:test2"
                                    ^

A ma connaissance le système n'ajoute pas de lui-même les espaces

Donc faire soit
        entree = "c:test1 "
soit
        "command /c xcopy/s "& entree & " " & sortie,0,true



>Cela ne fonctionne pas alors que si je met :

>set fso = CreateObject("Scripting.FileSystemObject")
>set shl = CreateObject("wscript.shell")
>shl.run "command /c xcopy/s C:test1 C:test2

>Ca fonctionne ... qqn voit-il une erreur ?- Masquer le texte des message s précédents -

- Afficher le texte des messages précédents -



Je ne sais pas comment te remércier, quel temps j'ai perdu !!!

Encore merci ! Bonne journée !
Avatar
Jean-Claude BELLAMY
"dasf" a écrit dans le message de groupe de discussion
:
Je fais un script en vbs qui lance xcopy.
entree = "C:test1"
sortie = "C:test2"
set fso = CreateObject("Scripting.FileSystemObject")
set shl = CreateObject("wscript.shell")
shl.run "command /c xcopy/s "& entree & sortie,0,true

Cela ne fonctionne pas alors que si je met :


set fso = CreateObject("Scripting.FileSystemObject")
set shl = CreateObject("wscript.shell")
shl.run "command /c xcopy/s C:test1 C:test2

Ca fonctionne ... qqn voit-il une erreur ?



Oh que oui !!!!
Elle est même flagrante ! ;-)

Je t'invite à l'avenir à faire comme moi quand je dois exécuter un
"shell.run" :
je ne passe JAMAIS en paramètre directement la chaine à exécuter, mais au
contraire une variable chaine contenant la dite chaine.
Si bien que lorsque çà "merdouille", j'ajoute une ligne qui affiche le
contenu de la variable.
Cela me permet de repérer immédiatement une erreur de syntaxe.

Dans ton cas :
...
cmd="command /c xcopy/s "& entree & sortie
wscript.echo cmd
shl.run cmd,0,true
...

ce qui affiche
command /c xcopy/s C:test1C:test2

Alors, tu vois l'erreur ?
Tout simplement tu as oublié un espace séparateur entre les 2 paramètres!!!

Il eût fallu écrire :
cmd="command /c xcopy/s "& entree & " " & sortie

Par ailleurs, ce n'est pas une erreur mais c'est fortement déconseillé, tu
fais appel à "command", (=command.com) qui est une appli DOS 16 bits, donc
limitée, nécessitant l'exécution préalable d'une NTVDM (NT Virtual DOS
Machine) !

Il est très nettement préférable de faire appel au processeur de commandes
Windows 32 bits, à savoir CMD.EXE

Donc au final la commande doit être :
cmd="cmd /c xcopy/s "& entree & " " & sortie


Dernier point : Puisque tu prends la peine de créer un VScript,, pourquoi
passer par un shell.run puis l'exécution de XCOPY, alors que tu disposes
nativement des méthodes "CopyFolder" et "CopyFile" dans
Scripting.FileSystemObject ?

http://www.bellamyjc.org/fr/vbsobj/vsmthcopyfolder.html
http://www.bellamyjc.org/fr/vbsobj/vsmthcopyfile.html

Le script devient :

entree = "C:test1"
sortie = "C:test2"
set fso = CreateObject("Scripting.FileSystemObject")
fso.copyfolder entree,sortie,true



--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr



__________ Information provenant d'ESET Smart Security, version de la base des signatures de virus 4404 (20090907) __________

Le message a été vérifié par ESET Smart Security.

http://www.eset.com
Avatar
mdnews
Tue, 8 Sep 2009 00:55:39 -0700 (PDT), dasf >>

On 8 sep, 09:44, mdnews wrote:
Tue, 8 Sep 2009 00:01:57 -0700 (PDT), dasf >>

>Bonjour,

>Je fais un script en vbs qui lance xcopy.

>entree = "C:test1"
>sortie = "C:test2"
>set fso = CreateObject("Scripting.FileSystemObject")
>set shl = CreateObject("wscript.shell")
>shl.run "command /c xcopy/s "& entree & sortie,0,true

Je pense que le système reçoit:
        "command /c xcopy/s C:test1C:test2"
                                    ^

A ma connaissance le système n'ajoute pas de lui-même les espaces

Donc faire soit
        entree = "c:test1 "
soit
        "command /c xcopy/s "& entree & " " & sortie,0,true



>Cela ne fonctionne pas alors que si je met :

>set fso = CreateObject("Scripting.FileSystemObject")
>set shl = CreateObject("wscript.shell")
>shl.run "command /c xcopy/s C:test1 C:test2

>Ca fonctionne ... qqn voit-il une erreur ?- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Je ne sais pas comment te remércier, quel temps j'ai perdu !!!

Encore merci ! Bonne journée !




Ca m'arrive souvent ce genre de truc, quand on a le nez collé sur le
code on fini par ne plus voir les trucs évidents :-)
Quand un truc qui devrait fonctionner, ne le fait pas, il m'arrive
maintenant de lacher tout, partir faire autre chose de tolalement
différents et revenir 1/4 plus tard: souvent on voit tout de suite
l'erreur.
Cela dit, il est utile d'afficher la ligne entière sous forme d'une
variable avant son exécution (et si on peut, de 'logguer' son
exécution ou faire une pause pour voir le résultat sur la console EX:
« xcopy ... & pause » )

Enfin, comme le dit JCB ci-dessous, utilise CMD.EXE (32bits) plutôt
que COMMAND.COM (16bits) voir même mieux, les commandes internes de
copie de chaque langage de programmation.

Cela dit, si ton programme a besoin de certains paramètres qui ne sont
disponible que dans XCOPY, saches que ce dernier est un programme à
part entière et non pas une commande interne au shell. Tu peux donc
l'appeler directement sans passer par CMD ou COMMAND.