mou*_*sio 114

%RANDOM% 给你一个0到32767之间的随机数.

使用类似的表达式SET /A test=%RANDOM% * 100 / 32768 + 1,您可以将范围更改为您喜欢的任何内容(此处范围为[1 ... 100]而不是[0 ... 32767]).

  • 更一般的表达式是`%RANDOM%*(%maxval% - %minval%+ 1)/ 32768 +%minval%`; 首先将`minval`和`maxval`设置为适当的值. (10认同)
  • 鉴于具体问题,您很可能会使用某种循环?然后你应该使用延迟扩展,例如通过`SETLOCAL ENABLEDELAYEDEXPANSION`并使用`!RANDOM!`而不是`%RANDOM%`,就像Eugene发布的那样. (7认同)

Gar*_*yNg 49

%RANDOM%为您提供0到32767之间的随机数.

您可以使用以下命令控制数字的范围:

set /a num=%random% %%100
Run Code Online (Sandbox Code Playgroud)

- 将产生0到99之间的数字.

这个:

set /a num=%random% %%100 +1
Run Code Online (Sandbox Code Playgroud)

- 将产生1到100之间的数字.

  • 请注意,这将不会均匀分布!以0~99为例,数字0~67比数字68~99略多,因为32767模数100是67而不是0,因为它必须是均匀分布.(这个'%random%%% 100`不是神奇的语法,但实际上`%random%%% 100`只有一个空格,其中`%%`只是一个转义的'%`代表模数.) (7认同)
  • @Calmarius如果你在命令行上使用它那么你需要1%。在 .BAT 文件中,您需要 2。这是因为在 .BAT 文件中,%100 有特殊含义,它是带参数执行时 .bat 文件的第 100 个参数。 (3认同)
  • 在 Windows 10 上尝试此操作时,我收到“缺少操作数”错误。看起来您只需要一个 % 来进行取模。 (2认同)

ind*_*div 18

您可能希望获得几个随机数,并且可能希望能够为每个数指定不同的范围,因此您应该定义一个函数.在我的例子中,我生成从25到30的数字call:rand 25 30.结果是在RAND_NUM该函数退出之后.

@echo off & setlocal EnableDelayedExpansion

for /L %%a in (1 1 10) do (
        call:rand 25 30
        echo !RAND_NUM!
)

goto:EOF

REM The script ends at the above goto:EOF.  The following are functions.

REM rand()
REM Input: %1 is min, %2 is max.
REM Output: RAND_NUM is set to a random number from min through max.
:rand
SET /A RAND_NUM=%RANDOM% * (%2 - %1 + 1) / 32768 + %1
goto:EOF
Run Code Online (Sandbox Code Playgroud)


小智 7

set /a number=%random% %% [maximum]-[minimum]
Run Code Online (Sandbox Code Playgroud)

例子 ”

set /a number=%random% %% 100-50
Run Code Online (Sandbox Code Playgroud)

将给出 100 到 50 之间的随机数。如果您不在批处理脚本中使用该行,请确保仅使用一个百分号作为操作数!


cal*_*k98 6

你可以这样做,这不需要EnableDelayedExpansion

:choosenamea
cls
set /a choosemname=%random%

if %choosemname% GTR %max% goto choosenameb
if %choosemname% LSS %min% goto choosenameb
goto gotnamenow
Run Code Online (Sandbox Code Playgroud)

哪里max是你的最大值,哪里min是你的最小值。这不是很有效,因为如果你的范围太小,可能会花费很多回合。此外,这对于大于 32767 的数字不起作用。


Evg*_*rin 5

@echo off & setLocal EnableDelayedExpansion

for /L %%a in (1 1 100) do (
echo !random!
)
Run Code Online (Sandbox Code Playgroud)