Problème pour ficher batch

Matt's -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  • 1
  • 2
  1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  3. karirovax Messages postés 3584 Statut Membre 215
     
    j'ai pas compis ton but
    0
  4. Matt's
     
    C'est pour créer un jeu de réflexion
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Matt's
     
    J'ai vraiment besoin d'une solution svp

    Merci d'avance
    0
  7. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  8. karirovax Messages postés 3584 Statut Membre 215
     
    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
  9. Matt's
     
    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
  10. karirovax Messages postés 3584 Statut Membre 215
     
    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
  11. Matt's
     
    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
  12. karirovax Messages postés 3584 Statut Membre 215
     
    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
  13. Matt's
     
    ç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
  14. karirovax Messages postés 3584 Statut Membre 215
     
    mais qu'elle est l'affichage qui vous voulez le faire ( un exemple )
    0
  15. Matt's
     
    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
  16. karirovax Messages postés 3584 Statut Membre 215
     
    echo alea%pos0% alea%pos1% alea%pos2% alea%pos3%
    est ce que ca c'est bon car j'ai pas bien compris
    0
  17. Matt's
     
    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
  18. karirovax Messages postés 3584 Statut Membre 215
     
    donc directement tapper :
    echo %pos0% ...etc
    ou
    echo %nb0% ...etc
    0
  19. Matt's
     
    Les valeurs de ces 2 variables sont des chiffres
    alors que celles que j'attend sont des lettres
    0
  20. karirovax Messages postés 3584 Statut Membre 215
     
    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
  21. Matt's
     
    Exactement

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