Problème pour ficher batch

Fermé
Matt's - 15 avril 2010 à 15:56
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 16 avril 2010 à 08:20
bonjour j'ai un souci pour une programmation en fichier 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

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
16 avril 2010 à 08:20
Je 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.
2
dubcek Messages postés 18757 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 19 décembre 2024 5 623
16 avril 2010 à 07:28
hello
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:>
1
karirovax Messages postés 3221 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 203
15 avril 2010 à 16:14
j'ai pas compis ton but
0
C'est pour créer un jeu de réflexion
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
J'ai vraiment besoin d'une solution svp

Merci d'avance
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
15 avril 2010 à 16:47
Pas évident...
essai de voir avec l'expansion retardé de variable.
Sinon, cherche la concaténation...
Mais ça me semble difficile. En bash, ça aurait été mieux.
0
karirovax Messages postés 3221 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 203
15 avril 2010 à 17:08
essayez d'améliorer votre code avec la commande for et pour les expensions retardés
SETLOCAL ENABLEEXPENSIONs et a la fin vous devez finir avec ENDLOCAL
mais avec cette commande les %% doit remplacer par !!
bon chance
0
je viens de voir ce que pouvait donné la commande FOR mais ce qui m'intéresse pour la création de mon projet.
Je veux juste savoir afficher une variable construites avec une valeur.
ex: j'ai %pos0%=3 , j'aimerai que ce "3" corresponde au 3 de %alea3% .
avez-vous une solution pour cela?
0
karirovax Messages postés 3221 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 203
15 avril 2010 à 17:49
comme il dit Char Snipeur .. ca c'est un peut difficile pour le batch
je trouve que vous cherchez la position qui correspond a une valeur ???
0
Oui car ma variable %alea0% a trois valeur possible I, H et E; Idem pour les autres.
Donc la présentation que je veux faire est
echo %alea*% %alea*% %alea*% %alea*%
Le signe " * " est la valeur de ma variable %pos0% ou %pos1% ou %pos2% ou %pos3%.
C'est pour ça que je voudrai remplacer " * " par une des variables %pos%.

J'espère que vous comprenez mon souci et que quelqu'un puisse m'aider.
Merci karirovax et Char Snipeur pour votre aide.
0
karirovax Messages postés 3221 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 203
15 avril 2010 à 18:15
si j'ai bien compris
si vous remplacez :
echo %alea%*% %alea*% %alea*% %alea*%
par
echo %alea%pos0%% %alea%pos1%% %alea%pos2%% %alea%pos3%%
est ce que ca utile
0
ça serait superbe mais j'ai déjà essayé et je ne trouve pas de variante qui fonctionnerait.

PS : echo %alea%pos0%% %alea%pos1%% %alea%pos2%% %alea%pos3%%
Donne pos0% pos1% pos2% pos3%
il faudrai par exemple A C H B
0
karirovax Messages postés 3221 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 203
15 avril 2010 à 18:33
mais qu'elle est l'affichage qui vous voulez le faire ( un exemple )
0
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...
0
karirovax Messages postés 3221 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 203
15 avril 2010 à 19:31
echo alea%pos0% alea%pos1% alea%pos2% alea%pos3%
est ce que ca c'est bon car j'ai pas bien compris
0
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.
0
karirovax Messages postés 3221 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 203
15 avril 2010 à 20:00
donc directement tapper :
echo %pos0% ...etc
ou
echo %nb0% ...etc
0
Les valeurs de ces 2 variables sont des chiffres
alors que celles que j'attend sont des lettres
0
karirovax Messages postés 3221 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 22 juin 2016 203
15 avril 2010 à 20:08
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 )
0
Exactement

Serais-tu enlever " alea0= " quand j'utilise :
set alea0
si tu sais c'est gagné pour moi
0