[BATCH] Manipulation de variables avec NIRCMD
Skape
-
Skape -
Skape -
Question aux amateurs de l'utilitaire NIRCMD.EXE
Bonjour,
Je souhaiterais comprendre pourquoi une variable fixée par nircmd ne se retrouve pas dans mon script d'origine.
Voici un exemple qui illustre parfaitement mon souci:
Contenu du fichier "test.cmd"
set var1=Valeur OK
TEST 1
set var1=Valeur Bidon
call test.cmd
echo %var1%
Résultat => Valeur OK
TEST 2
set var1=Valeur Bidon
nircmd execmd test.cmd
echo %var1%
Résultat => Valeur Bidon
- Comment expliquez-vous ceci ?
- Quelle solution proposez-vous pour obtenir le résultat souhaité ?
Bonjour,
Je souhaiterais comprendre pourquoi une variable fixée par nircmd ne se retrouve pas dans mon script d'origine.
Voici un exemple qui illustre parfaitement mon souci:
Contenu du fichier "test.cmd"
set var1=Valeur OK
TEST 1
set var1=Valeur Bidon
call test.cmd
echo %var1%
Résultat => Valeur OK
TEST 2
set var1=Valeur Bidon
nircmd execmd test.cmd
echo %var1%
Résultat => Valeur Bidon
- Comment expliquez-vous ceci ?
- Quelle solution proposez-vous pour obtenir le résultat souhaité ?
A voir également:
- Enabledelayedexpansion
- Fichier batch - Guide
- Batch pause 10 secondes ✓ - Forum Programmation
- Batch renommer une partie du nom de plusieurs fichiers ✓ - Forum Autoit / batch
- Batch converter - Télécharger - Photo & Graphisme
- Modification de plusieurs fichiers avec .bat ✓ - Forum Autoit / batch
6 réponses
hello
parce que la variable est créée dans un environnement qui disparait à l'arrêt de nircmd
- essayer setlocal enableDelayedExpansion
- ne pas utiliser nircmd
parce que la variable est créée dans un environnement qui disparait à l'arrêt de nircmd
- essayer setlocal enableDelayedExpansion
- ne pas utiliser nircmd
D'accord, c'est bien ce qu'il me semblait...
A quel moment dois-je utiliser "setlocal enableDelayedExpansion" ?
> j'ai bien tenter de le mettre en début de script mais ca ne semble pas fonctionner
La seconde proposition ne me convient pas. J'ai vraiment besoin de nircmd, tu comprendras que le code décris ci-dessus ne sert qu'a expliquer mon problème. Le script final consiste a executer un programme en silence qui retourne un tas de valeurs et je souhaite n'en recuperer qu'une seule.
Merci pour ta participation.
A quel moment dois-je utiliser "setlocal enableDelayedExpansion" ?
> j'ai bien tenter de le mettre en début de script mais ca ne semble pas fonctionner
La seconde proposition ne me convient pas. J'ai vraiment besoin de nircmd, tu comprendras que le code décris ci-dessus ne sert qu'a expliquer mon problème. Le script final consiste a executer un programme en silence qui retourne un tas de valeurs et je souhaite n'en recuperer qu'une seule.
Merci pour ta participation.
J'ai bien une idée mais je ne sais pas si elle convient:
est-il possible d'ecrire dans les variables d'environnement (de windows) ?
est-ce une bonne idée et si oui, comment fait-on ?
est-il possible d'ecrire dans les variables d'environnement (de windows) ?
est-ce une bonne idée et si oui, comment fait-on ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
le double && a une autre signification que &
& [...] commande1 & commande2 Permet de séparer plusieurs commandes sur la ligne de commande. Cmd.exe exécute la première commande, puis la seconde.
&& [...] commande1 && commande2 Permet d'exécuter la commande suivant && uniquement si la commande précédant le symbole est exécutée correctement. Cmd.exe exécute la première commande, puis la deuxième commande uniquement si la première a été exécutée correctement.
passer les données par un fichier ?
& [...] commande1 & commande2 Permet de séparer plusieurs commandes sur la ligne de commande. Cmd.exe exécute la première commande, puis la seconde.
&& [...] commande1 && commande2 Permet d'exécuter la commande suivant && uniquement si la commande précédant le symbole est exécutée correctement. Cmd.exe exécute la première commande, puis la deuxième commande uniquement si la première a été exécutée correctement.
passer les données par un fichier ?
Pas plus de succès avec la commande "setx ... -m" qui nécessite un rafraichissement de l'environnement. Mais cela m'a permis de me mettre sur la voix d'une autre commande: setenv
Cela n'est pas forcement la meilleure méthode mais j'ai réussi a rafraichir la variable en procédant ainsi:
Contenu du fichier "test.cmd":
setenv -m var1 "Valeur OK"
TEST 2
set var1=Valeur Bidon
nircmd execmd call test.cmd
setenv -m var1 -delete
for /F "delims=" %%i in ('setenv -m var1') do set var1=%%i
echo %var1%
Résultat => Valeur OK
Par contre, ce que je ne comprends pas, c'est pourquoi ai-je besoin de la ligne "setenv -m var1 -delete" pour rafraichir la variable ?
Cela n'est pas forcement la meilleure méthode mais j'ai réussi a rafraichir la variable en procédant ainsi:
Contenu du fichier "test.cmd":
setenv -m var1 "Valeur OK"
TEST 2
set var1=Valeur Bidon
nircmd execmd call test.cmd
setenv -m var1 -delete
for /F "delims=" %%i in ('setenv -m var1') do set var1=%%i
echo %var1%
Résultat => Valeur OK
Par contre, ce que je ne comprends pas, c'est pourquoi ai-je besoin de la ligne "setenv -m var1 -delete" pour rafraichir la variable ?
OK, j'ai compris: j'ai simplement besoin de faire une pause car le script continue son execution alors que nircmd n'a pas encore terminé.
Donc, en somme:
TEST 2
set var1=Valeur Bidon
nircmd execmd test.cmd
ping 0.0.0.0 -n 1 > NUL
for /f "delims=" %%i in ('setenv -m var1') do set var1=%%i
echo %var1%
allez, au dodo.
Donc, en somme:
TEST 2
set var1=Valeur Bidon
nircmd execmd test.cmd
ping 0.0.0.0 -n 1 > NUL
for /f "delims=" %%i in ('setenv -m var1') do set var1=%%i
echo %var1%
allez, au dodo.