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

Problème script batch

2 réponses
Avatar
Gui
bonjour à tous,

Je reviens à nouveaux vers vous car j'ai un problème au niveau d'un script
que j'essaye de mettre au point avec des boucles for imbriquées ("nested
loop").
Premièrement, je ne sais pas si ces "boucles" sont supporté en batch donc
cela sera ma première question. Si toutefois cela ne pose pas de problème,
vous pouvez lire la fin de ce message. :p

Deuxièmement, il semble que les valeurs de %errorlevel% soient mal
répercutée lors de ce genre de "tests":
>echo %%a | find /I "String"
dans mon exemple, la valeur de %errorlevel% (dans un script et pas
directement en ligne de commande) vaut toujours 0. Que la chaine de caractère
soit trouvée ou non. Je pense que cette valeur renvoyée correspond à la
commande >echo %%a. Si quelqu'un à déjà eu ce genre de problème peut il m'en
dire d'avantage.

Troisièmement, est t'il possible d'affecter une valeur de variable avec la
commande echo.
ex: echo "string" | set MaVariable=
J'ai essayé de jouer avec plusieurs méthodes, notament avec le symbole ^
devant | mais rien de concluant de ce coté la... Avez vous une idée?

Quatrièmement, merci de votre patiente :)

Bonne journée.
Gui

2 réponses

Avatar
Jean-Claude BELLAMY
"Gui" a écrit dans le message de groupe de
discussion :
bonjour à tous,

Je reviens à nouveaux vers vous car j'ai un problème au niveau d'un script
que j'essaye de mettre au point avec des boucles for imbriquées ("nested
loop").
Premièrement, je ne sais pas si ces "boucles" sont supporté en batch donc
cela sera ma première question.
Et bien OUI !

Il suffit d'essayer, c'te bonne blague !
Ah franchement il y en a qui n'ont pas l'esprit curieux !

Fichier "multifor.cmd"
------- couper ici -------
@echo off
for /L %%I in (1 2 9) do (
for /L %%J in (12 -3 3) do (
set /A R=%%I*%%J
echo %%I x %%J = !R!
)
)
------- couper ici -------

NB: ATTENTION à l'expansion retardée des variables !
Comme j'utilise une variable d'environnement ("R") à l'intérieur d'une
boucle, je dois utiliser les "!" et non pas les "%" pour récupérer sa valeur
!
echo %%I x %%J = !R! donne le bon résultat
echo %%I x %%J = %R% donnerait un résultat vide !


L'exécution de ce batch donne :
C:vbs>multifor.cmd
1 x 12 = 12
1 x 9 = 9
1 x 6 = 6
1 x 3 = 3
3 x 12 = 36
3 x 9 = 27
3 x 6 = 18
3 x 3 = 9
5 x 12 = 60
5 x 9 = 45
5 x 6 = 30
5 x 3 = 15
7 x 12 = 84
7 x 9 = 63
7 x 6 = 42
7 x 3 = 21
9 x 12 = 108
9 x 9 = 81
9 x 6 = 54
9 x 3 = 27


Deuxièmement, il semble que les valeurs de %errorlevel% soient mal
répercutée lors de ce genre de "tests":
echo %%a | find /I "String"
dans mon exemple, la valeur de %errorlevel% (dans un script et pas

directement en ligne de commande) vaut toujours 0. Que la chaine de
caractère
soit trouvée ou non. Je pense que cette valeur renvoyée correspond à la
commande >echo %%a.
Oui, c'est çà


Si quelqu'un à déjà eu ce genre de problème peut il m'en
dire d'avantage.
Cela se contourne facilement en n'utilisant pas de "pipe"!

...
echo %%a > test.tmp
find /I "String" test.tmp > nul
if %errorlevel% ....

Troisièmement, est t'il possible d'affecter une valeur de variable avec la
commande echo.
NON

ex: echo "string" | set MaVariable Quelle drôle d'idée issue d'un esprit shadok !!!!!!!!


Moi dans ce cas, j'écris bêtement :
set MaVariable="string"

J'ai essayé de jouer avec plusieurs méthodes, notament avec le symbole ^
devant | mais rien de concluant de ce coté la... Avez vous une idée?
cf. ci-dessus !

Question corollaire : que veux tu faire EX-AC-TE-MENT ?



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


Avatar
Gui
Premièrement, je ne sais pas si ces "boucles" sont supporté en batch donc
cela sera ma première question.
Et bien OUI !

Il suffit d'essayer, c'te bonne blague !
Ah franchement il y en a qui n'ont pas l'esprit curieux !
Si si, mais je testai plus ou moins mon script en meme temps que ce message.

Et surtout, il y a ce qui marche et ce qui est supporté :)

NB: ATTENTION à l'expansion retardée des variables !
Comme j'utilise une variable d'environnement ("R") à l'intérieur d'une
boucle, je dois utiliser les "!" et non pas les "%" pour récupérer sa valeur
!
echo %%I x %%J = !R! donne le bon résultat
echo %%I x %%J = %R% donnerait un résultat vide !
ca ok, pas de souci, j'utilisais déja, mais merci pour le rappel !



Si quelqu'un à déjà eu ce genre de problème peut il m'en
dire d'avantage.
Cela se contourne facilement en n'utilisant pas de "pipe"!

....
echo %%a > test.tmp
find /I "String" test.tmp > nul
if %errorlevel% ....
pas pratique et ca ne me plait pas trop dans ce que je veux faire de jouer

avec les fichiers.

Question corollaire : que veux tu faire EX-AC-TE-MENT ?
l'idée est de lire un fichier de parametres séparé par des sections

([section]) et de passer ensuite ces parametres au lancement d'un programme.

Merci de ton aide.
Gui