bonjour,

La variable %random% réagit étrangement lorsqu'on la combine à un modulo dans un batch.

dans un invite de commande, ceci marche très bien :

Elle retourne un nombre pseudo aléatoire compris entre 0 et 1.

Dans un batch du type ci-dessous, les nombres générés sont de l'ordre de plusieurs milliers.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
@echo off

set /a n="%random%%2"
echo n=%n%

pause
J'ai créé un petit batch qui calcule des stats pour comparer des nombres générés avec et sans modulo :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@echo off
setlocal enabledelayedexpansion
echo tirage du %time%>>c:\random.log
set /a m1="0"
set /a m2="0"
for /l %%i in (1,1,10) do (
set /a n="!random!%2"
echo %%i : '!n!'
set /a m1+="!n!"
set /a m_1="!n!/10"
)
echo moyenne1=%m_1%
echo modulo 2 :	moyenne1=%m_1%>>c:\random.log

echo -----

for /l %%i in (1,1,10) do (
set /a n="!random!"
echo %%i : '!n!'
set /a m2+="!n!"
set /a m_2="!m2!/10"
)
echo moyenne2=%m_2%
echo no modulo :	moyenne2=%m_2%>>c:\random.log

pause
voici le genre de résultat que j'obtiens :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
tirage du 10:30:20,42
modulo 2 :	moyenne1=2907
no modulo :	moyenne2=17915
tirage du 10:30:23,26
modulo 2 :	moyenne1=1062
no modulo :	moyenne2=16653
tirage du 10:30:25,56
modulo 2 :	moyenne1=3110
no modulo :	moyenne2=16904
tirage du 10:30:37,35
modulo 5 :	moyenne1=2285
no modulo :	moyenne2=11856
tirage du 10:30:39,59
modulo 5 :	moyenne1=1056
no modulo :	moyenne2=12106
tirage du 10:30:41,60
modulo 5 :	moyenne1=3103
no modulo :	moyenne2=15634
tirage du 10:30:52,89
modulo 10 :	moyenne1=28942
no modulo :	moyenne2=15375
tirage du 10:30:54,85
modulo 10 :	moyenne1=16646
no modulo :	moyenne2=15626
tirage du 10:30:56,25
modulo 10 :	moyenne1=4349
no modulo :	moyenne2=15877
On voit que le modulo a une influence par rapport au random sans modulo. Entre modulo 2 et modulo 5, la différence n'est pas flagrante...

Comment fait-on pour générer un nombre entre 0 et 10 par exemple, dans un batch alors?