标题: [数值计算] 批处理如何获取随机的参数值?? [打印本页]
作者: Lundy 时间: 2021-5-7 17:38 标题: 批处理如何获取随机的参数值??
比如有多个数值
11.22.33.44.55.66.77.88.123.321.999
有这些数值
如何随机取一个??
作者: cutebe 时间: 2021-5-7 17:54
利用系统变量:random
作者: Lundy 时间: 2021-5-7 17:57
回复 2# cutebe
能详细一点吗大哥.小弟新手....不是很懂
作者: cutebe 时间: 2021-5-7 17:59
- ::随机取数
- @echo off
- setlocal enableDelayedExpansion
- set "num=11.22.33.44.55.66.77.88.123.321.999"
- for %%a in (%num:.= %)do (set/an+=1&set _r!n!=%%a)
- :loop
- set/a rnd=%random%%%n+1
- echo 数共 %n% 个,随机取第 %rnd% 个 !_r%rnd%!
- pause
- goto :loop
复制代码
作者: Lundy 时间: 2021-5-7 18:22
回复 4# cutebe
厉害啊大佬..谢谢..
作者: 1152 时间: 2021-5-7 20:42
本帖最后由 1152 于 2021-5-21 12:29 编辑
给您介绍一下MS-DOS中的批处理命令random的用法及实例。
一、random的取值范围
要使用random,必须将其当作一个变量来使用,这样才能得到值。
打开MS-DOS窗口,输入如下代码,即可获得值。
代码如下:复制代码
%random%可以产生0到32767之间的随机数。
二、通过获得一定范围内的随机数
通过一,我们知道,%random%可以产生0到32767之间的随机数,但是,如何才能得到一定范围内的随机数呢?
通用的算法公式如下:
通用的公式%random%%%(max-min+1)+min来产生[min,max]区间里的随机数,注:批处理中求模得用两个%%符号。
比如,我们想获得4到12之间的随机数,就可以这样来使用,代码如下:
代码如下:- @REM 产生10个[4,12]间的随机数
- @echo off
- REM 启用延迟环境变量扩展
- setlocal enabledelayedexpansion
- REM 设置随机数的最小和最大值以及求模用的变量
- set min=4
- set max=12
- set /a mod=!max!-!min!+1
-
- for /l %%i in (1,1,10) do (
- REM 产生[min,max]之间的随机数
- set /a r=!random!%%!mod!+!min!
- echo.
- echo 随机数%%i:!r!
- )
复制代码
三、其它实例
实例①:常用功能
生成1到100之间的随机数
代码如下:- set /a RandomNumber=%random%%%100+1
- ::100是范围数,1是底数即开始的数.(在bat 中使用),在CMD中会出错.
- ::取随机两位数
- set /a d=%random:~0,2%
- echo %d%
- ::避免00
- set /a e=1%random:~0,2%-100
- echo %e% @echo off
- :loop
- set /a RandomNumber=1%random:-1%%random:-1%-99
- ::最大值100
- if %RandomNumber% LSS 35 goto loop
- ::小于35返回
- if %RandomNumber% GTR 75 goto loop
- ::大于75返回
- echo %RandomNumber%
- if “%RandomNumber%” == “50” pause
- goto loop
复制代码
实例②:随机获取文件名
代码如下:- @echo off
- if “%1” NEQ “$” (
- for /f “tokens=1,2 delims=:” %%a in (’"%~0" $^|sort’) do @echo %%b
- ) else for /f “delims=” %%i in ('dir /b /a-d .mp3’) do @call :sub %%i
- goto :EOF:sub
- echo %random%:%
- goto :EOF
复制代码
实例③:在一个文本中随机取一行数据
代码如下:- @ECHO %DBG% OFF
- SETLOCAL ENABLEDELAYEDEXPANSION
- FOR /F “TOKENS=*” %%i IN (TEST.TXT) DO (SET /A h+=1 & SET r!h!=%%i)
- SET /A s=%RANDOM%%%%h%+1
- ECHO !r%s%!
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |