Problème pour ficher batch
Matt's
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 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!!!
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!!!
A voir également:
- Problème pour ficher batch
- Fichier batch - Guide
- Ficher rar - Guide
- Batch converter - Télécharger - Photo & Graphisme
- Batch renommer une partie du nom de plusieurs fichiers ✓ - Forum Autoit / batch
- Color batch - Forum Autoit / batch
31 réponses
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 :
Ce n'est pas très élégant mais ça devrais fonctionner.
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.
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:>
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.
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
SETLOCAL ENABLEEXPENSIONs et a la fin vous devez finir avec ENDLOCAL
mais avec cette commande les %% doit remplacer par !!
bon chance
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?
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?
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 ???
je trouve que vous cherchez la position qui correspond a une valeur ???
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.
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.
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
si vous remplacez :
echo %alea%*% %alea*% %alea*% %alea*%
par
echo %alea%pos0%% %alea%pos1%% %alea%pos2%% %alea%pos3%%
est ce que ca utile
ç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
PS : echo %alea%pos0%% %alea%pos1%% %alea%pos2%% %alea%pos3%%
Donne pos0% pos1% pos2% pos3%
il faudrai par exemple A C H B
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...
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...
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.
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.