Using the dynamic variable %Random%
, we can get a random integer from 0 to 32767. For example:
echo %random%
This obviously, returns an integer from 0 to 32767. But sometimes we want it to be in a specific range, say from 1 to 100.
The basic method to do so is listed below.
set /a result=(%RANDOM%*max/32768)+min
where max
is the top number that can be generated, and min
is the smallest number that can be generated. Note that you will not get any decimal numbers because set /a
rounds down automatically. To generate a decimal random number, try this:
set /a whole=(%RANDOM%*max/32768)+min
set /a decimal=(%RANDOM%*max/32768)+min
echo %whole%.%decimal%
If you try
set /a whole=(%RANDOM%*65536/32768)+1
you will most likely get random numbers that are odd.
To generate numbers larger than 32767, here is a better method.
set /a result=%random:~-1%%random:~-1%%random:~-1%%random:~-1%%random:~-1%%random:~-1%
The previous code extracts the 1 character from each %random%
. But this is done on purpose.
Since the random
number could be one digit number, extracting the last 2 digit won't work. That's why we extract only the last character. In this case, we have 6 %random:~-1%
, generating the maximum of 999999
, and the minimum at 000000
, you may need to adjust this to suit your needs.
cmd.exe
generate the seed based on the time the cmd
section started, so if you start mutliple section at the nearly same time, the result may not be 'random' enough.