OVH Cloud OVH Cloud

creation du variable

2 réponses
Avatar
Torned
je voudrais creer cette une variable :

set varpn=dsquery user domainroot -samid %username% -o rdn

pour quelle me donne le resultat Nom Prenon, mais une fois lance si je fais
un set il me donne le resultat suivant :

varpn=dsquery user domainroot -samid david -o rdn

et non pas le resultat que j'obtient en faisant %varpn%.

Ou est mon erreur ?

+

2 réponses

Avatar
Jean-Claude BELLAMY
Dans le message news:cjgmh4$d11$ ,
Torned s'est ainsi exprimé:

je voudrais creer cette une variable :

set varpn=dsquery user domainroot -samid %username% -o rdn

pour quelle me donne le resultat Nom Prenon, mais une fois lance si
je fais un set il me donne le resultat suivant :

varpn=dsquery user domainroot -samid david -o rdn

et non pas le resultat que j'obtient en faisant %varpn%.

Ou est mon erreur ?


Il n'y en a pas !
Car le résultat que tu obtiens est tout à fait normal.

Quand tu écris "set varpn=dsquery user...."
tu affectes la chaine "dsquery user...." à la variable "varpn", donc cette
variable contient ... cette chaine, c'est logique!

Toi, ce que tu veux, c'est l'INTERPRÉTATION de la commande représentée par
cette chaine, ce qui totalement DIFFÉRENT!

Un moyen de provoquer l'exécution d'une commande et de récupérer son
résultat est de passer par une boucle FOR :

for /f %%V in ('commande-à-exécuter') do ....

La commande doit être encadrée par des apostrophes (simple quote)
Le résultat se retrouve dans la variable de boucle

Comme par défaut dasn ces boucles FOR le délimiteur est l'espace (et la
tabulation), si jamais il y en a dans le résultat, afin de tout récupérer,
on va préciser quels sont les délimiteurs (à savoir AUCUN) à l'aide du
commutateur "delims="

"delims=" signifie qu'il n'y a aucun caractère délimiteur (on prend
tout!)

Exemple :
@echo off
for /F "delims=" %%C in ('echo %username% sur %computername%') do set
test=%%C
echo Test vaut %test%


Dans ton cas , cela va donner :

for /F "delims=" %%C in ('dsquery user domainroot -samid %username% -o rdn')
do set varpn=%%C

NB: le nom de la variable de boucle (ici "%%C", ou plus haut "%%V"), est
totalement arbitraire ! Il suffit qu'il soit le même partout dans la ligne,
c'est tout.


Il existe d'autres solutions, un peu moins simples, p.ex :

set varpn=dsquery user domainroot -samid %username% -o rdn
set tempfile=result.txt
%varpn% > %tempfile%
for /F "delims=" %%C in (%tempfile) do set varpn=%%C


Ici j'exécute la variable %varpn%, et je dirige le résultat dans un fichier
(temporaire)
Ensuite, je fais là aussi appel à une boucle FOR pour affecter à la variable
de boucle le contenu du fichier



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


Avatar
Torned
Le script VBS marche tres bien, mais la command FOR m'interresse aussi
Je fais des tests pour voir si j'arrive au meme resultat.

Merci beaucoup pour toutes ces informations

Merci JC :)

"Jean-Claude BELLAMY" a écrit dans le
message de news:
Dans le message news:cjgmh4$d11$ ,
Torned s'est ainsi exprimé:

je voudrais creer cette une variable :

set varpn=dsquery user domainroot -samid %username% -o rdn

pour quelle me donne le resultat Nom Prenon, mais une fois lance si
je fais un set il me donne le resultat suivant :

varpn=dsquery user domainroot -samid david -o rdn

et non pas le resultat que j'obtient en faisant %varpn%.

Ou est mon erreur ?


Il n'y en a pas !
Car le résultat que tu obtiens est tout à fait normal.

Quand tu écris "set varpn=dsquery user...."
tu affectes la chaine "dsquery user...." à la variable "varpn", donc cette
variable contient ... cette chaine, c'est logique!

Toi, ce que tu veux, c'est l'INTERPRÉTATION de la commande représentée par
cette chaine, ce qui totalement DIFFÉRENT!

Un moyen de provoquer l'exécution d'une commande et de récupérer son
résultat est de passer par une boucle FOR :

for /f %%V in ('commande-à-exécuter') do ....

La commande doit être encadrée par des apostrophes (simple quote)
Le résultat se retrouve dans la variable de boucle

Comme par défaut dasn ces boucles FOR le délimiteur est l'espace (et la
tabulation), si jamais il y en a dans le résultat, afin de tout récupérer,
on va préciser quels sont les délimiteurs (à savoir AUCUN) à l'aide du
commutateur "delims="

"delims=" signifie qu'il n'y a aucun caractère délimiteur (on prend
tout!)

Exemple :
@echo off
for /F "delims=" %%C in ('echo %username% sur %computername%') do set
test=%%C
echo Test vaut %test%


Dans ton cas , cela va donner :

for /F "delims=" %%C in ('dsquery user domainroot -samid %username% -o
rdn')

do set varpn=%%C

NB: le nom de la variable de boucle (ici "%%C", ou plus haut "%%V"), est
totalement arbitraire ! Il suffit qu'il soit le même partout dans la
ligne,

c'est tout.


Il existe d'autres solutions, un peu moins simples, p.ex :

set varpn=dsquery user domainroot -samid %username% -o rdn
set tempfile=result.txt
%varpn% > %tempfile%
for /F "delims=" %%C in (%tempfile) do set varpn=%%C


Ici j'exécute la variable %varpn%, et je dirige le résultat dans un
fichier

(temporaire)
Ensuite, je fais là aussi appel à une boucle FOR pour affecter à la
variable

de boucle le contenu du fichier



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