>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 !
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!!!
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 ?
-- 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
"dasf" <leoscyboz@gmail.com> a écrit dans le message de groupe de discussion
: b3fe95c0-783c-4266-9373-66c8575bfb11@g19g2000yqo.googlegroups.com...
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!!!
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 ?
--
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) __________
"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!!!
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 ?
-- 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) __________
>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.
>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.
>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.