找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23432|回复: 4

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

[复制链接]
发表于 2016-10-15 19:29:13 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-11-24 08:28 编辑

使用random时,
规定最大值为498000,最小值为88000
但是取出的随机数的最大值总在100000左右徘徊。
发表于 2016-10-15 20:03:09 | 显示全部楼层
  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
发表于 2016-10-15 21:28:00 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2016-10-15 21:43:13 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2016-10-16 10:23:36 | 显示全部楼层

  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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 12:19 , Processed in 0.027687 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表