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

[数值计算] 批处理如何获取随机的参数值??

比如有多个数值
11.22.33.44.55.66.77.88.123.321.999
有这些数值
如何随机取一个??

本帖最后由 1152 于 2021-5-21 12:29 编辑

给您介绍一下MS-DOS中的批处理命令random的用法及实例。

一、random的取值范围

要使用random,必须将其当作一个变量来使用,这样才能得到值。
  打开MS-DOS窗口,输入如下代码,即可获得值。

代码如下:
  1. echo %random%
复制代码
%random%可以产生0到32767之间的随机数。

二、通过获得一定范围内的随机数

通过一,我们知道,%random%可以产生0到32767之间的随机数,但是,如何才能得到一定范围内的随机数呢?
  通用的算法公式如下:
  通用的公式%random%%%(max-min+1)+min来产生[min,max]区间里的随机数,注:批处理中求模得用两个%%符号
  比如,我们想获得4到12之间的随机数,就可以这样来使用,代码如下:

代码如下:
  1. @REM 产生10个[4,12]间的随机数
  2.   @echo off
  3.   REM 启用延迟环境变量扩展
  4.   setlocal enabledelayedexpansion
  5.   REM 设置随机数的最小和最大值以及求模用的变量
  6.   set min=4
  7.   set max=12
  8.   set /a mod=!max!-!min!+1
  9. for /l %%i in (1,1,10) do (
  10.   REM 产生[min,max]之间的随机数
  11.   set /a r=!random!%%!mod!+!min!
  12.    echo.
  13.   echo 随机数%%i:!r!
  14.   )
复制代码
三、其它实例

实例①:常用功能  
  生成1到100之间的随机数

代码如下:
  1. set /a RandomNumber=%random%%%100+1
  2.   ::100是范围数,1是底数即开始的数.(在bat 中使用),在CMD中会出错.
  3.   ::取随机两位数
  4.   set /a d=%random:~0,2%
  5.   echo %d%
  6.   ::避免00
  7.   set /a e=1%random:~0,2%-100
  8.   echo %e% @echo off
  9.   :loop
  10.   set /a RandomNumber=1%random:-1%%random:-1%-99
  11.   ::最大值100
  12.   if %RandomNumber% LSS 35 goto loop
  13.   ::小于35返回
  14.   if %RandomNumber% GTR 75 goto loop
  15.   ::大于75返回
  16.   echo %RandomNumber%
  17.   if “%RandomNumber%” == “50” pause
  18.   goto loop
复制代码
实例②:随机获取文件名

代码如下:
  1. @echo off
  2.   if “%1” NEQ “$” (
  3.    for /f “tokens=1,2 delims=:” %%a in (’"%~0" $^|sort’) do @echo %%b
  4.   ) else for /f “delims=” %%i in ('dir /b /a-d .mp3’) do @call :sub %%i
  5.   goto :EOF:sub
  6.   echo %random%:%
  7.   goto :EOF
复制代码
实例③:在一个文本中随机取一行数据

代码如下:
  1. @ECHO %DBG% OFF
  2.   SETLOCAL ENABLEDELAYEDEXPANSION
  3.   FOR /F “TOKENS=*” %%i IN (TEST.TXT) DO (SET /A h+=1 & SET r!h!=%%i)
  4.   SET /A s=%RANDOM%%%%h%+1
  5.   ECHO !r%s%!
复制代码

TOP

回复 4# cutebe


    厉害啊大佬..谢谢..

TOP

  1. ::随机取数
  2. @echo off
  3. setlocal enableDelayedExpansion
  4. set "num=11.22.33.44.55.66.77.88.123.321.999"
  5. for %%a in (%num:.= %)do (set/an+=1&set _r!n!=%%a)
  6. :loop
  7. set/a rnd=%random%%%n+1
  8. echo 数共 %n% 个,随机取第 %rnd% 个 !_r%rnd%!
  9. pause
  10. goto :loop
复制代码
如无特别说明,代码测试环境均为 XP SP3

TOP

回复 2# cutebe


    能详细一点吗大哥.小弟新手....不是很懂

TOP

利用系统变量:random
如无特别说明,代码测试环境均为 XP SP3

TOP

返回列表