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.

## Generating Random Numbers Within Specific Range

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%``````

## Generating Random Numbers larger than 32767

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.

## Pseudorandom

`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.