Board logo

标题: [系统相关] [已解决]批处理命令random有个特殊的方法 [打印本页]

作者: 小文    时间: 2015-3-5 15:53     标题: [已解决]批处理命令random有个特殊的方法

::A
  1. @echo off
  2. set /a sj= %random%%%9+1
  3. echo 本次运行%sj%.vbs&pause
  4. start %sj%.vbs
复制代码
::B
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set min=1
  4. set max=10
  5. set /a mod=!max!-!min!+1
  6. set /a r=!random!%%!mod!+!min!
  7. ……
复制代码
我想问下上面两个random有什么不同的地方?B我还大概可以理解,A我就不知道是怎样的道理了,A有什么猫腻?规律?用法??
作者: CrLf    时间: 2015-3-5 15:58

回复 1# 小文


    其实是一回事,都是取范围内的随机数
作者: 小文    时间: 2015-3-5 16:05

回复 2# CrLf


    非常感谢你的回答,但你这样的回答好像是白白浪费你的精力的……你懂的。对了起,我是新手,我不理解%random%%%9+1应该怎样修改。9+1是什么意思呢?在这里我知道可以随机运行1-9的文件,但如果是10-90呢?比如把9+1改成9+5并不是随机运行5-9之间的文件。好像是5-(9+5)之间的。
作者: pcl_test    时间: 2015-3-5 16:05

回复 1# 小文

random是一个动态环境变量,用于返回一个0~32767 之间的随机整数,获取指定范围内的随机整数
要获取[0,m]之间的整数: set /a a=%random% %% (m +1)
要获取[m,n]之间的整数: set /a a= m+%random% %% (m-n +1) 
要对数字进行数学运算,须使用set /a命令
作者: 小文    时间: 2015-3-5 16:15

回复 4# pcl_test


    为什么random/?查不到呢?它属于什么东东叫经?那像这类不能在cmd elp里查的东西是不是只能在网上找?有没有具体一点的书……也有那些cmd help里没有的命令及用法。
已经很感谢你的解答了, set /a a=%random% %% (m +1)刚刚试了一下,(m+0)也是可以的,运行0-m的文件,谢谢你,受教了!
作者: pcl_test    时间: 2015-3-5 16:18

回复 5# 小文
是个变量,不是命令,echo %random%就会返回一个随机数
作者: CrLf    时间: 2015-3-5 16:20

回复 5# 小文


    random 属于动态环境变量,见 set /? 的最后一页
    要注意的是,只有不存在同名的“静态”环境变量时,动态环境变量才会生效,比如:
  1. echo %random%
  2. echo %random%
  3. ::现在是动态的
  4. set random=哎哟朕卡住了
  5. echo %random%
  6. echo %random%
  7. ::现在是静态的
  8. set "random="
  9. echo %random%
  10. echo %random%
  11. ::现在又是动态的
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2