OVH Cloud OVH Cloud

affecter le résultat d'une variable

7 réponses
Avatar
lin kha
Bonjour

Je souhaite affecter le résultat d'une variable à une autre variable d'un
autre fichier .bat
Il me faudrait une commande qui ai le rôle d'un find mais en prenant la
valeur de la chaîne et non pas la chaîne elle-même.

merci bien

7 réponses

Avatar
Jean-Claude BELLAMY
Dans le message news: ,
lin kha s'est ainsi exprimé:

Bonjour

Je souhaite affecter le résultat d'une variable à une autre variable
d'un autre fichier .bat
Il me faudrait une commande qui ai le rôle d'un find mais en prenant
la valeur de la chaîne et non pas la chaîne elle-même.



Explique un peu mieux ce que tu veux faire ...
Avec un exemple de préférence.

Que signifie "une autre variable d'un autre fichier .bat" ?

A priori :
set variable2=%variable1%

Où est le pb ?


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

Avatar
lin kha
En fait je crée une variable d'environnement dans un fichier .bat.
Ensuite celui-ci fait appel à une requête sql avec la commande
@nom_requete.sql.

J'ai besoin d'utiliser la valeur de la variable dans ma requête.
Je n'arrive pas à reprendre cette valeur ni avec un set, ni avec un prompt.

J'espere mêtre mieux exprimée
Avatar
lin kha
En fait j'ai créé une variable d'environnement à partir d'un fichier .bat.
Ensuite celui-ci appelle une requête sql avec @nom_requête.sql.

Dans ma requete, je souhaite utiliser la valeur de la variable, mais je
n'arrive pas à la récupérer (set n'est pas accepté).

Si quelqu'un peut m'éclairer svp

Merci


Dans le message news: ,
lin kha s'est ainsi exprimé:

Bonjour

Je souhaite affecter le résultat d'une variable à une autre variable
d'un autre fichier .bat
Il me faudrait une commande qui ai le rôle d'un find mais en prenant
la valeur de la chaîne et non pas la chaîne elle-même.



Explique un peu mieux ce que tu veux faire ...
Avec un exemple de préférence.

Que signifie "une autre variable d'un autre fichier .bat" ?

A priori :
set variable2=%variable1%

Où est le pb ?


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






Avatar
Jean-Claude BELLAMY
Dans le message news: ,
lin kha s'est ainsi exprimé:

En fait j'ai créé une variable d'environnement à partir d'un fichier
.bat. Ensuite celui-ci appelle une requête sql avec @nom_requête.sql.

Dans ma requete, je souhaite utiliser la valeur de la variable, mais
je n'arrive pas à la récupérer (set n'est pas accepté).



Je t'ai demandé :
"Avec un exemple de préférence."

Qu'y a t-il dans ton batch ?
Quelle est la requête SQL à exécuter ?
Comment, où, dans quoi,... ?
Quelle est la variable dont tu veux récupérer la valeur ?
Quand tu écris :
"j'ai créé une variable d'environnement à partir d'un fichier .bat."
que cela signifie-t'il chez toi ?
Car pour créer une variable d'environnement dans un batch, je ne connais que
la commande SET (ou éventuellement SETX du Resource Kit qui permet de rendre
permanente une variable).

Quand tu écris
"je n'arrive pas à la récupérer (set n'est pas accepté)."
que cela signifie-t'il chez toi ?
Quel message d'erreur ?
Où est-ce que "set" n'est pas accepté ?

On peut faire plein de choses avec les variables d'environnement, p.ex. avec
une boucle FOR et sa syntaxe étendue...
P.ex. remplir une variable avec le résultat d'une commande :
FOR /F "usebackq delims=" %%C IN (`ma commande`) do set mavariable=%%C
....
NB: les caractères encadrant la commande sont des apostrophes inversées,
obtenues par la séquence ALT-GR 7
Le paramètre "usebackq" indique que le contenu de IN est une commande, et
que l'utilisation éventuelle de guillemets (") pour encadrer un nom de
fichier ou dossier passé en paramètres à la commande est possible :
FOR /F "usebackq delims=" %%C IN (`dir "c:Documents and Settings"`) do set
mavariable=%%C
echo %mavariable%



Mais pour adapter cela à ton cas, il faudrait savoir ce que tu veux faire
EX-AC-TE-MENT !
N'oublie pas qu'un problème BIEN exposé est à moitié résolu !


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

Avatar
lin kha
bon bah cette fois-ci, j'espère que je vais me faire comprendre:

Voici mon fichier bat ==>

@ECHO OFF

for /F "tokens=3 delims=/, " %%i in ('date /T') do set MOIS=%%i
for /F "tokens=4 delims=/, " %%i in ('date /T') do set ANNEE=%%i

if %MOIS%= set moislettre=jan-%ANNEE%
if %MOIS%= set moislettreþb-%ANNEE%
if %MOIS%= set moislettre=mar-%ANNEE%
if %MOIS%= set moislettre=apr-%ANNEE%
if %MOIS%= set moislettre=may-%ANNEE%
if %MOIS%= set moislettre=jun-%ANNEE%
if %MOIS%= set moislettre=jul-%ANNEE%
if %MOIS%= set moislettre=aug-%ANNEE%
if %MOIS%= set moislettre=sep-%ANNEE%
if %MOIS%= set moislettre=oct-%ANNEE%
if %MOIS%= set moislettre=nov-%ANNEE%
if %MOIS%= set moislettreÞc-%ANNEE%
sqlplus -s @marequete.sql
pause

Je suis obligé de fair tous ces tests if car dans ma BD, les mois sont
référencés avec les 3 premières de chaque mois.

Ensuite dans marequete.sql, je souhaite faire une simple requête du style:
SELECT *
from ma table
where mois=moislettre

Et c'est la que j'ai un problème parce que je ne sais pas comment récupérer
la valeur de "moislettre" affectée dans mon fichier.bat

Voila
Merci à tous ceux et celles qui pourront me répondre.
et bien sûr bonnes fêtes à tous le monde
Avatar
Jean-Claude BELLAMY
Dans le message news: ,
lin kha s'est ainsi exprimé:

bon bah cette fois-ci, j'espère que je vais me faire comprendre:

Voici mon fichier bat ==>

@ECHO OFF

for /F "tokens=3 delims=/, " %%i in ('date /T') do set MOIS=%%i
for /F "tokens=4 delims=/, " %%i in ('date /T') do set ANNEE=%%i

if %MOIS%= set moislettre=jan-%ANNEE%
if %MOIS%= set moislettreþb-%ANNEE%
if %MOIS%= set moislettre=mar-%ANNEE%
if %MOIS%= set moislettre=apr-%ANNEE%
if %MOIS%= set moislettre=may-%ANNEE%
if %MOIS%= set moislettre=jun-%ANNEE%
if %MOIS%= set moislettre=jul-%ANNEE%
if %MOIS%= set moislettre=aug-%ANNEE%
if %MOIS%= set moislettre=sep-%ANNEE%
if %MOIS%= set moislettre=oct-%ANNEE%
if %MOIS%= set moislettre=nov-%ANNEE%
if %MOIS%= set moislettreÞc-%ANNEE%
sqlplus -s @marequete.sql
pause

Je suis obligé de fair tous ces tests if car dans ma BD, les mois sont
référencés avec les 3 premières de chaque mois.

Ensuite dans marequete.sql, je souhaite faire une simple requête du
style: SELECT *
from ma table
where mois=moislettre

Et c'est la que j'ai un problème parce que je ne sais pas comment
récupérer la valeur de "moislettre" affectée dans mon fichier.bat


ENFIN tu as daigné à exposer ton pb ! ;-)
Je commence à y voir plus clair ...

Et c'est évident à résoudre !
Vu que le contenu du fichier "marequete.sql" dépend (dynamiquement) de
l'exécution du batch principal, il FAUT et il SUFFIT de créer dynamiquement
le fichier "marequete.sql" dans le batch (logique, n'est-ce pas ?) !

...
if %MOIS%= set moislettreÞc-%ANNEE%
echo SELECT * from ma table where mois=%moislettre% > marequete.sql
sqlplus -s @marequete.sql
pause

Pas plus compliqué que çà !
_______________________

PS: pour ton info, je te rappelle qu'il existe sous NT une variable
d'environnement nommée %DATE%, qui dispense de l'exécution de la commande
"date" avec le commutateur "/T".
De plus, la commande SET permet d'extraire des sous-chaines sans avoir à
passer par une boucle FOR.

Jusqu'à Windows 2000 :
Set mois=%date:~8,2%
Set annee=%date:~11,4%

A partir de Windows XP :
Set mois=%date:~3,2%
Set annee=%date:~6,4%

(la différence vient du fait que le jour de la semaine était indiqué en tête
sous NT4 et W2K)


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

Avatar
lin kha
lol bah j'aurais enfin réussi à me faire comprendre!!lol
c'est vrai qu'en me relisant, je me suis trouvée pas très claire!!

alors encore merci pour ton aide et ta patience...
Bonnes fêtes de fin d'année à toi et à tout le monde d'ailleurs!!!


Dans le message news: ,
lin kha s'est ainsi exprimé:

bon bah cette fois-ci, j'espère que je vais me faire comprendre:

Voici mon fichier bat ==>

@ECHO OFF

for /F "tokens=3 delims=/, " %%i in ('date /T') do set MOIS=%%i
for /F "tokens=4 delims=/, " %%i in ('date /T') do set ANNEE=%%i

if %MOIS%= set moislettre=jan-%ANNEE%
if %MOIS%= set moislettreþb-%ANNEE%
if %MOIS%= set moislettre=mar-%ANNEE%
if %MOIS%= set moislettre=apr-%ANNEE%
if %MOIS%= set moislettre=may-%ANNEE%
if %MOIS%= set moislettre=jun-%ANNEE%
if %MOIS%= set moislettre=jul-%ANNEE%
if %MOIS%= set moislettre=aug-%ANNEE%
if %MOIS%= set moislettre=sep-%ANNEE%
if %MOIS%= set moislettre=oct-%ANNEE%
if %MOIS%= set moislettre=nov-%ANNEE%
if %MOIS%= set moislettreÞc-%ANNEE%
sqlplus -s @marequete.sql
pause

Je suis obligé de fair tous ces tests if car dans ma BD, les mois sont
référencés avec les 3 premières de chaque mois.

Ensuite dans marequete.sql, je souhaite faire une simple requête du
style: SELECT *
from ma table
where mois=moislettre

Et c'est la que j'ai un problème parce que je ne sais pas comment
récupérer la valeur de "moislettre" affectée dans mon fichier.bat


ENFIN tu as daigné à exposer ton pb ! ;-)
Je commence à y voir plus clair ...

Et c'est évident à résoudre !
Vu que le contenu du fichier "marequete.sql" dépend (dynamiquement) de
l'exécution du batch principal, il FAUT et il SUFFIT de créer dynamiquement
le fichier "marequete.sql" dans le batch (logique, n'est-ce pas ?) !

...
if %MOIS%= set moislettreÞc-%ANNEE%
echo SELECT * from ma table where mois=%moislettre% > marequete.sql
sqlplus -s @marequete.sql
pause

Pas plus compliqué que çà !
_______________________

PS: pour ton info, je te rappelle qu'il existe sous NT une variable
d'environnement nommée %DATE%, qui dispense de l'exécution de la commande
"date" avec le commutateur "/T".
De plus, la commande SET permet d'extraire des sous-chaines sans avoir à
passer par une boucle FOR.

Jusqu'à Windows 2000 :
Set mois=%date:~8,2%
Set annee=%date:~11,4%

A partir de Windows XP :
Set mois=%date:~3,2%
Set annee=%date:~6,4%

(la différence vient du fait que le jour de la semaine était indiqué en tête
sous NT4 et W2K)


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