Problème pour ficher batch
j'ai un problème pour rejoindre le nom et l'affectation d'une variable par la valeur d'une autre, j'ai pour l'instant :
Pour déffinir la position d'affichage:
set /a pos0=%random%%%4
:er0
set /a pos1=%random%%%4
if %pos0% EQU %pos1% goto er0
:er1
set /a pos2=%random%%%4
if %pos0% EQU %pos2% goto er1
if %pos1% EQU %pos2% goto er1
:er2
set /a pos3=%random%%%4
if %pos0% EQU %pos3% goto er2
if %pos1% EQU %pos3% goto er2
if %pos2% EQU %pos3% goto er2
Pour l'affectation d'une constante
set /a nb0=%random%%%3
set /a nb1=%random%%%3
set /a nb2=%random%%%3
set /a nb3=%random%%%3
if %nb0%==0 set alea0=I
if %nb0%==1 set alea0=H
if %nb0%==2 set alea0=E
if %nb1%==0 set alea1=A
if %nb1%==1 set alea1=N
if %nb1%==2 set alea1=E
if %nb2%==0 set alea2=C
if %nb2%==1 set alea2=A
if %nb2%==2 set alea2=S
if %nb3%==0 set alea3=L
if %nb3%==1 set alea3=I
if %nb3%==2 set alea3=B
Et j'aimerai comme ceci
echo %alea0% %alea1% %alea2% %alea3%
Mais je voudrai remplacer le 0, 1, 2, 3 par %pos0%, %pos1%, %pos2%, %pos3%.
En gros afficher
echo %alea%pos0%% %alea%pos1%% %alea%pos2%% %alea%pos3%%
Cela me permetterait d'interchanger les positions aléatoirement de mes variables:
%alea0%, %alea1%, %alea2%, %alea3%.
svp help me!!!
31 réponses
Le sujet porte sur un script Batch qui doit afficher alea0 à alea3 selon des positions pos0 à pos3 générées aléatoirement et utilisées pour réorganiser l'affichage. Plusieurs réponses suggèrent d'utiliser l'expansion retardée et for pour accéder dynamiquement à des variables nommées par des indices, ou d'écrire un batch temporaire réassemblant les valeurs. D'autres considèrent que ce type d'indirection n'est pas directement faisable en batch et proposent des alternatives comme générer un second batch qui réécrit les affectations puis affiche le résultat. Une nuance utile est que pos0 à pos3 restent des indices entre 0 et 3 et que l'association via for et l'expansion retardée permet l'assemblage des chaînes selon l'ordre défini sans écrire de code additionnel.
-
ContributeurJe pense vraiment que ce que tu veux faire directement n'est pas possible en batch, qui est, il faut le reconnaitre, un interpréteur de script assez basique.
Ce que tu cherches à faire tiens plus de la programmation, ce n'est pas le but de cmd de faire des jeux.
Néanmoins, je pense que tu peut t'en sortir en passant par un second fichier bat.
après avoir initialiser toutes tes variables, tu fais :echo set alea0=%alea0% > tmp.bat echo set alea1=%alea1% >>tmp.bat ... echo %alea%pos0%% %alea%pos1%% %alea%pos2%% %alea%pos3%%>>tmp.bat tmp.bat del tmp.bat
Ce n'est pas très élégant mais ça devrais fonctionner. -
Contributeurhello
C:> type bb.bat @echo off set alea0=0000000 set alea1=1111111 set alea2=2222222 set alea3=3333333 set alea4=4444444 set x=2 for /f "delims==, tokens=2" %%a in ('set alea%x%') do echo alea%x% %%a set x=4 for /f "delims==, tokens=2" %%a in ('set alea%x%') do echo alea%x% %%a set x=0 for /f "delims==, tokens=2" %%a in ('set alea%x%') do echo alea%x% %%a C:> bb alea2 2222222 alea4 4444444 alea0 0000000 C:> -
pour l'activé ....? si oui
cmd /E:on -
je ne sais pas comment faire .......
-
je croix que les EXTENSIONS de commande sont désactivées ( car si ils ont activées donc pas d'affichage)
-
pour moi si, quand j'écrie
set /a pos0=0
set alea0=M
set alea%pos0%
dans fichier batch et que je le lance une fenêtre cmd s'ouvre et m'indique
alea0=M
Appuyez sur une touche pour continuer... -
mais j'ai remarqué que vous tappez ceci directement à l'invite de commande (cmd) et pas sur un fichier batch
parce que si celui est dans le batch il n'affiche rien -
Sinon j'ai trouvé ça :
set /a pos0=0
set alea0=M
set alea%pos0%
ça me donne
alea0=M
c'est ce que je veux mais sans le " alea0= "
commen dois-je faire? -
non je le connais pas
-
Connais-tu le jeu de société Buggle. C'est ce jeu que je veux réaliser informatiquement
-
cela je pense qu'avec une boucle comme ( for )
-
Le problème est que %pos0% est un chiffre aléatoire compris entre 0 et 3. C'est sa valeur qui va définir la variable %alea*%, ce chiffre (0 ou 1 ou 2 ou 3) remplacera " * " de la variable %alea...%.
-
ou de faire ceci
echo la %pos0% est %alea0%
echo la %pos1% est %alea1%
...etc -
Exactement
Serais-tu enlever " alea0= " quand j'utilise :
set alea0
si tu sais c'est gagné pour moi -
mais je croix que vous déja fait ceci
echo %alea0% %alea1% %alea2% %alea3%
et il affiche par ex :
A B H C
puis au dessous encore tappez :
echo %pos0% ...etc
el la résultat final est :
A B H C
0 1 2 3 par exemple suivant le variable ( aléatoirement ) -
Les valeurs de ces 2 variables sont des chiffres
alors que celles que j'attend sont des lettres -
donc directement tapper :
echo %pos0% ...etc
ou
echo %nb0% ...etc -
Non sa ne marche pas non plus.
j'ai peu être une autre solution, en utilisant la fonction SET:
si je fais :
set alea%pos0%
sa va me donné :
alea0=Valeur que j'attend
mais je ne ve pa que ce " alea0= " s'affiche
Je voudrais juste ma valeur. -
echo alea%pos0% alea%pos1% alea%pos2% alea%pos3%
est ce que ca c'est bon car j'ai pas bien compris -
Il faudrai
une des trois valeurs de %alea0% + une des trois valeurs de %alea1% + une des trois valeurs de %alea2% + une des trois valeurs de %alea3%
Et la valeur qui sera défini dans ces variables devront être afficher dans un ordre aléatoire.
Exemples avec toujours les mêmes valeurs pour les variables %alea0%, %alea1%, %alea2% et %alea3%.
ex:
C B A H ou
B H C A ou
B C A H ou
A B H C ou
etc...
- 1
- 2