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

不用%random%或!random!产生随机数

[复制链接]
发表于 2013-2-5 22:02:26 | 显示全部楼层 |阅读模式
如题,谁能做到?加分!!
发表于 2013-2-5 22:25:04 | 显示全部楼层
发表于 2013-2-5 22:34:51 | 显示全部楼层
参考以下两贴:
跟踪CMD中的随机数%random%中已经提到 random 是以时间为随机数种子,以及如何运算获得伪随机数。
可以看到这种算法是“有损”的,很难通过现有 %random% 逆推获得种子值
但可获取启动时间来换算随机数种子初始值,参考此贴:批处理技术内幕:随机数%RANDOM%

其实自己随便取个种子也口以啊:
  1. @echo off&setlocal enabledelayedexpansion
  2. set r=1!time:~-1!2!time:~-2!
  3. ::定义种子,这里就直接把产生的伪随机数当成种子来用了,虽然它们实际上是分开的...
  4. for /l %%a in () do (
  5.     set /a "r=(r*0x343fd+0x269ec3>>0x10)&0x7fff"
  6.     echo !r!
  7. )
  8. ::常数还是尊重ms的设置,想来他们取这几个值一定是有所考虑的
  9. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
悬崖之树 + 1 有水平

查看全部评分

发表于 2013-2-5 22:41:17 | 显示全部楼层
本帖最后由 523066680 于 2013-2-5 22:42 编辑

随机数总是和时间相关连的
谁能制造随机数而不引用时间值,加分。
 楼主| 发表于 2013-2-7 21:55:22 | 显示全部楼层
我这个方法不用系统时间:
  1. @echo off&setlocal enabledelayedexpansion
  2. rem  本生成随机数的方法是截取系统中文件大小数据的前四位,硬盘上的文件越多,生成的随机数就越

  3. for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
  4. if exist %%i:\ (
  5.   %%i:&cd\
  6.   for /f %%i in ('dir /a-d /b /s') do (
  7.      if %%~zi gtr 999 (
  8.        set num=%%~zi
  9.        echo !num:~,4!
  10.        set /a n+=1
  11.      )
  12.   )
  13. )
  14. )
  15. echo.
  16. echo 不好意思,共生成随机数%n%个!
  17. pause>nul
复制代码

评分

参与人数 1PB +6 技术 +3 收起 理由
523066680 + 6 + 3 兌现

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 23:49 , Processed in 0.019166 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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