EDIT: Я изменил мой ответ, потому что ОП изменил свой вопрос: изначально диапазон желаемых случайных чисел было 0 до 4 ...
Правая формула:
set /a var=%random% * 4/32768
использование других операторов вместо (например,/или%) изменяет распределение случайных чисел, поэтому вы получите повторяющийся результат чаще, чем с помощью правильной формулы.
EDIT: Дополнительные пояснения добавил
Предыдущий код должен корректно работает в вашем примере выше. Однако, если ваш код помещен в код код (прилагается в круглых скобках), вы должны использовать Delayed Expansion (как указывали другие лица в своих ответах) в все переменные, которые могут быть изменены внутри блока, включая RANDOM.Например:
@echo off
setlocal EnableDelayedExpansion
:ProgStart
(
set /a var = !random! * 4/32768
goto target!var!
)
Если вы хотите, вы можете использовать эту простую формулу, которая дает эквивалентные результаты (случайные числа от 0 до 3):
set /a var = !random!/8192
У меня нет этой проблемы. Попробуйте вынуть '@' перед '@echo% var%'? Хотя это действительно ничего не должно меняться ... – Zyerah
Ваш код генерирует случайное число от 0 до 3; правильной формулой будет: 'set/a var =% random%/6554'. Однако формула _standard_ намного понятнее (см. Мой ответ ниже). – Aacini