- :rndnum
- set lnum=%~1
- set unum=%~2
- if "%lnum%" == "" (set lnum=1)
- if "%unum%" == "" (set unum=9)
- if %lnum% GTR %unum% (set lnum=%unum%&set unum=%lnum%)
- set /a rnd=(%unum% - %lnum% + 1) * %random% / 32768 + %lnum%
- goto :eof
复制代码 其中%random%的范围为0-32767,那么这个随机小数就可以通过除以32768获得,剩下的取整不需要人工干预,批处理就自动解决了。
生成随机数的范围:大于等于最小值,小于等于最大值
为了确定是否稳定,测试了10W次
测试代码如下:- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- :s
- cls
- for /l %%a in (1,1,100000) do (
- call :rndnum
-
- echo. %%a 中间结果:!rnd!
-
- if 1!rnd! GTR 19 (call :over !rnd!)
- if 1!rnd! LSS 11 (call :over !rnd!)
- )
-
- echo.
- echo.
- echo.计算结束!
- echo.
- echo.
- pause
- exit
-
- :rndnum
- set lnum=%~1
- set unum=%~2
- if "%lnum%" == "" (set lnum=1)
- if "%unum%" == "" (set unum=9)
- if %lnum% GTR %unum% (set lnum=%unum%&set unum=%lnum%)
- set /a rnd=(%unum% - %lnum% + 1) * %random% / 32768 + %lnum%
- goto :eof
-
- :over
- cls
- echo.
- echo.
- echo. 调试结果:%~1
- echo.
- echo.
- pause
- goto :eof
复制代码
|