PRNG, используемый cmd
, инициализируется с использованием текущего времени с разрешением в одну секунду один раз для каждого экземпляра cmd
(это поведение было раскрыто здесь а>). Два отдельных экземпляра cmd
, запущенные в одну и ту же секунду, будут генерировать одну и ту же псевдослучайную последовательность.
Но последовательные выполнения одних и тех же или разных пакетных файлов внутри одного и того же экземпляра cmd
будут извлекать разные (или нет, это случайные) «случайные» последовательности.
В первом случае, когда отдельные экземпляры запускаются в одно и то же или около секунды, вы можете получить указанное поведение, указанное в вашем вопросе, но проблема усугубляется арифметикой вашего кода.
Если n
одинаково или похоже для каждого выполнения, а %random%
возвращает значение, близкое к тому, которое было возвращено в предыдущем выполнении (как вы описываете), то n*%random%
вернет результат, близкий к единице в предыдущем выполнении. При делении на 32768 любая разница будет отброшена, и вы получите тот же выбранный файл.
В этом случае лучше использовать оператор по модулю. Будучи остатком от деления, легче получить другой результат лишь немного отличающегося начального случайного значения.
set /a "rand=%random% %% n + 1"
person
MC ND
schedule
25.10.2015