130 votes

Comment utiliser random dans BATCH script ?

Comment utiliser random dans BATCH script ?

1 votes

Pourquoi voulez-vous faire cela spécifiquement en batch ?

0 votes

Il y a un très intéressant post sur SuperUser liés aux nombres aléatoires dans les scripts batch qui méritent d'être référencés ici...

153voto

mousio Points 4039

%RANDOM% vous donne un nombre aléatoire entre 0 et 32767.

En utilisant une expression comme SET /A test=%RANDOM% * 100 / 32768 + 1 vous pouvez modifier l'intervalle comme vous le souhaitez (ici l'intervalle est [1 100] au lieu de [0 32767]).

9 votes

Étant donné le problème spécifique, vous utiliserez très probablement une sorte de boucle ? Dans ce cas, vous devriez en effet utiliser l'expansion retardée, par exemple par l'intermédiaire de SETLOCAL ENABLEDELAYEDEXPANSION et en utilisant !RANDOM! au lieu de %RANDOM% comme l'a fait Eugène.

21 votes

Une expression plus générale serait %RANDOM% * (%maxval% - %minval% + 1) / 32768 + %minval% ; il suffit de mettre minval y maxval aux valeurs appropriées en premier lieu.

1 votes

Voir aussi réponse de l'indiv

65voto

GaryNg Points 545

%RANDOM% vous donne un nombre aléatoire entre 0 et 32767.

Vous pouvez contrôler la portée du numéro avec :

set /a num=%random% %%100

- produira un nombre entre 0~99.

Celui-là :

set /a num=%random% %%100 +1

- produira un nombre entre 1~100.

16 votes

Notez que la distribution ne sera pas uniforme ! Si l'on reprend l'exemple de 0~99, les nombres 0~67 apparaîtront légèrement plus souvent que les nombres 68~99 car 32767 modulo 100 est 67 et non 0 comme cela devrait être le cas pour une distribution uniforme. (Cette %random% %%100 n'est pas une syntaxe magique mais en fait %random % %% 100 avec un espace en moins, où le %% est juste une échappatoire % qui signifie "modulo").

2 votes

J'obtiens l'erreur "Missing operand" en essayant ceci sur Windows 10. On dirait que vous avez besoin d'un seul % pour le modulo.

3 votes

@Calmarius Si vous l'utilisez en ligne de commande, vous avez besoin de 1 %. Dans un fichier .BAT, vous en avez besoin de 2, car dans un fichier .BAT, %100 a une signification particulière : il s'agit du 100e argument du fichier .bat lorsqu'il est exécuté avec des arguments.

22voto

indiv Points 7403

Vous souhaiterez probablement obtenir plusieurs nombres aléatoires, et vous voudrez peut-être pouvoir spécifier une plage différente pour chacun d'entre eux, c'est pourquoi vous devez définir une fonction. Dans mon exemple, je génère des nombres de 25 à 30 avec call:rand 25 30 . Et le résultat est dans RAND_NUM après la sortie de cette fonction.

@echo off & setlocal EnableDelayedExpansion

for /L %%a in (1 1 10) do (
        call:rand 25 30
        echo !RAND_NUM!
)

goto:EOF

REM The script ends at the above goto:EOF.  The following are functions.

REM rand()
REM Input: %1 is min, %2 is max.
REM Output: RAND_NUM is set to a random number from min through max.
:rand
SET /A RAND_NUM=%RANDOM% * (%2 - %1 + 1) / 32768 + %1
goto:EOF

0 votes

Thx, bon travail : if for /L %%a in (1 1 %3 ') do call:rand %1 %2

7voto

Evgeny Gavrin Points 3180
@echo off & setLocal EnableDelayedExpansion

for /L %%a in (1 1 100) do (
echo !random!
)

7voto

Jacob Points 31
set /a number=%random% %% [maximum]-[minimum]

exemple "

set /a number=%random% %% 100-50

donnera un nombre aléatoire entre 100 et 50. Assurez-vous de n'utiliser qu'un seul signe de pourcentage comme opérande si vous n'utilisez pas la ligne dans un script de lot !

1 votes

Sous Windows 10, il donne des chiffres de -50 à 49, comme il se doit. A-t-il jamais fait autrement ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X