[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] [已解决]批处理如何生成超过5位数的指定范围内的随机数

本帖最后由 pcl_test 于 2016-11-24 08:28 编辑

使用random时,
规定最大值为498000,最小值为88000
但是取出的随机数的最大值总在100000左右徘徊。

  1. @echo off & setlocal enableDelayedExpansion
  2. mode 80,2000
  3. for /L %%a in (1 1 1000) do (
  4.     set /a "t=1088000 + (1!random:~-2!!random:~-4!-1000000) %% (498000-88000+1)"
  5.     echo;!t:~-6!
  6. )
  7. pause
  8. exit /b
复制代码
回复 1# nbtnt

TOP

本帖最后由 pcl_test 于 2016-10-16 06:26 编辑

random返回的是基于系统时间生成的一个0~32767之间的随机整数
set /a的计算数值范围为-2^31~2^31-1,即-2147483648~2147483647
  1. @echo off&setlocal enabledelayedexpansion
  2. rem 拆分拼接(8,8000)~(8,9999);(9,0000)~(9,9999);……(48,0000)~(48,9999);(49,0000)~(49,8000)
  3. (for /l %%a in (1 1 1000) do (
  4.     set /a a=8+!random!%%42&rem 8~49
  5.     if !a! equ 8 (
  6.         set /a b=8000+!random!%%2000&rem 8000~9999
  7.         echo;!a!!b!
  8.     ) else (
  9.         if !a! equ 49 (
  10.             set /a b=10000+!random!%%8001&rem 10000~18000
  11.         ) else (
  12.             set /a b=10000+!random!%%10000&rem 10000~19999
  13.         )
  14.         echo;!a!!b:~1!
  15.     )
  16. ))>result.txt
  17. pause
复制代码

TOP

本帖最后由 pcl_test 于 2016-10-15 23:46 编辑
  1. @echo off
  2. set min=88000
  3. set max=498000
  4. for /f "delims=" %%a in ('mshta "javascript:(new ActiveXObject('Scripting.Filesystemobject')).GetStandardStream(1).Write(Math.floor(Math.random()*(%max%-%min%+1)+%min%));close()"') do echo;%%a
  5. pause
复制代码
  1. rem win7及以上系统运行
  2. powershell -c "get-random -min 88000 -max 498001"
  3. pause
复制代码

TOP

  1. @echo off&setlocal enabledelayedexpansion
  2. REM 设置随机数位数
  3. set BITS=9
  4. for /l %%i in (1,1,200) do (
  5. set "s=$"
  6. for /l %%i in (1,1,!BITS!) do (
  7. set/a "r=!random!%%10"&set "s=!s!!r!"
  8. )
  9. set/p=!s!, <NUL
  10. set/a "n=%%i%%5"
  11. if !n! equ 0 (echo;)
  12. )
  13. pause
复制代码

TOP

返回列表