![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-10 13:04 |
共 47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,255 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » (已结)如何用批处理生成一个随机数 |
| 可打印版本 6,453 / 19 |
| 第1楼 cheng059830 | 发表于 2005-08-16 22:39 |
| 初级用户 发帖 15 积分 46 | |
|
(已结)如何用批处理生成一个随机数 我想用批处理生成一个随机数.有方法可以实现.
---------- Edited by willsort ---------- 有以下方案: 1、直接引用环境变量 %random% (2楼), 可用程序控制其生成位数(6,9,13楼)可在WinNT系列环境下 2、VBS脚本生成(4楼),可在Windows下使用 3、strings+LMOD(5楼),可在Windows和DOS下使用 4、纯批处理(9楼),可在Windows或DOS下使用 ---------- Edited by willsort ---------- [ Last edited by willsort on 2005-8-19 at 16:14 ] |
|
| 第2楼 无奈何 | 发表于 2005-08-16 23:53 |
| 荣誉版主 发帖 356 积分 1,338 | |
|
nt环境下可用扩展变量%random%
命令行下键入:echo %random% 看看。 详细信息键入:set /? |
|
| 第3楼 cheng059830 | 发表于 2005-08-17 16:37 |
| 初级用户 发帖 15 积分 46 | |
|
能不能详细说一下例子.
如果我需要生成1到100之间的随机数,应该怎样写. |
|
| 第4楼 chenhui530 | 发表于 2005-08-17 17:49 |
| 高级用户 发帖 273 积分 772 | |
|
DOS下我不知道
但是VBS倒是很简单 Dim MyValue, Response Randomize '初始化随机数生成器。 Do Until Response = vbNo MyValue = Int((6 * Rnd) + 1) ' 产生 1 到 6 之间的随机数。 MsgBox MyValue Response = MsgBox ("Roll again? ", vbYesNo) Loop |
|
| 第5楼 JonePeng | 发表于 2005-08-17 21:41 |
| 金牌会员 发帖 1,883 积分 4,562 来自 广东广州 | |
|
%random%变量只适用于NT环境下,这时如果用Strings再配合LMOD则可以生成一个随机数。%random%的特点是随机产生一个0~32768之间的整数,因此用 strings 命令将%random%和327相除,就可以得到0~100的整数了。
... strings div %random%,327 | Lmod set xyz= >tmp.bat call tmp.bat >nul del tmp.bat ... 这样就可以产生一个随机数到%xyz%,可以随时调用了。 可惜该方法不能在纯DOS和Win9x下通过。 [ Last edited by JonePeng on 2005-8-17 at 23:19 ] |
|
| 第6楼 无奈何 | 发表于 2005-08-18 11:42 |
| 荣誉版主 发帖 356 积分 1,338 | |
Originally posted by cheng059830 at 2005-8-17 16:37: setlocal ENABLEDELAYEDEXPANSION for /l %%i in (1,1,3) do ( echo %random% >nul set x%%i=!random:~-1! ) set x=%x1%%x2%%x3% echo %x% |
|
| 第7楼 cheng059830 | 发表于 2005-08-18 17:37 |
| 初级用户 发帖 15 积分 46 | |
Originally posted by 无奈何 at 2005-8-18 11:42: 能不能说明一下"!random:~-1!"是什么意思. 谢谢. |
|
| 第8楼 cheng059830 | 发表于 2005-08-18 18:18 |
| 初级用户 发帖 15 积分 46 | |
|
已经明白"%random:~-1%"这个意思了.谢谢.
|
|
| 第9楼 willsort | 发表于 2005-08-18 18:32 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re 无奈何:
你给出的代码可以更简单些: 另外,Win9x和DOS下获取随机数到环境变量可以参考 {8905}批处理编程的异类 3楼的代码。 [ Last edited by willsort on 2005-8-18 at 18:34 ] |
|
| 第10楼 无奈何 | 发表于 2005-08-19 00:24 |
| 荣誉版主 发帖 356 积分 1,338 | |
Originally posted by cheng059830 at 2005-8-18 17:37: "!random:~-1!" 两个!!引起来的是延迟环境变量,详细见 set /? |
|
| 第11楼 无奈何 | 发表于 2005-08-19 00:29 |
| 荣誉版主 发帖 356 积分 1,338 | |
Originally posted by willsort at 2005-8-18 18:32: |
|
| 第12楼 无奈何 | 发表于 2005-08-19 00:42 |
| 荣誉版主 发帖 356 积分 1,338 | |
|
顺便问一下:
我原先写的是这样: setlocal ENABLEDELAYEDEXPANSION for /l %%i in (1,1,3) do ( echo %random% >nul set x=!random:~-1! ) echo %x% 但只返回一位数,为什么用了延迟环境变量仍还不行,谁能给个解答? |
|
| 第13楼 willsort | 发表于 2005-08-19 16:06 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re 无奈何(12楼):
因为你在循环中没有依次将 %random% 的最后一位除去,所以每次引用的都是 %random% 的相同的最后一位;同时,因为你多次引用了 %random%,而每次被引用的 %random% 都是不同的,所以不会组合得到最初的随机数的最后三位数。 按照你的思路,我写了以下的代码。当然,程序的复杂是我起初想不到的,可见良好的算法和技巧可以省却很多编程上的无用功。目前,下面的代码处理三位数以下的随机数仍然是有错的,这源于 set 环境延迟对空变量的识别机制与我们想象的不同。 |
|
| 第14楼 无奈何 | 发表于 2005-08-19 23:30 |
| 荣誉版主 发帖 356 积分 1,338 | |
|
Re willsort版主 『第 13 楼』:
谢谢版主的热心解答,我的原意是想累计获取3次不同的 %random%的最后一位,看了你的程序我才意识到我犯了逻辑错误,不知道我当初怎么想的。 ![]() 你的代码处理三位数以下确实有错,我试了300次才总算找到一个: Old random number: 87 New random number: ~-187 换了个思路重写了一下,应该没有问题了。 |
|
| 第15楼 willsort | 发表于 2005-08-21 18:20 |
| 元老会员 发帖 1,512 积分 4,432 | |
|
Re 无奈何(14楼):
既然如上,索性如下: [ Last edited by willsort on 2005-8-21 at 18:23 ] |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |