转载:在批处理中使用随机数字

在批处理中使用随机数字

RANDOM 是一个动态环境变量,用于返回一个0~32767 之间的随机整数。
当 CMD.exe 捕获到 RANDOM 关键字后,会调用相关函数生成一个基于当前系统时间的随机整数。

在代码中有两种方式使用RANDOM变量:
%random% (一般多使用这种形式)
!random!(开启变量延迟扩展后可以这样使用)

在 Set /a 中不能像普通变量一样(如,set /a a=a+1)直接使用变量名字: 
正确用法是:set /a a=%RANDOM%+5 或 set /a a=!RANDOM!+5

(1)获取指定范围内的随机整数
要获取[0,m]之间的整数: set /a a=%random% %% (m +1)
要获取[m,n]之间的整数: set /a a= m+%random% %% (m-n +1)

注意:
要对数字进行数学运算,必须使用set /a命令。
余数运算符号在命令窗口中是%,在批处理文件中是%%。

例子1
::生成一个不超过10000的正整数
set /a a=1+%random%%%10000

例子2
::生成一个四位数
set /a a=1000+%random%%%9000

(2)检测随机整数的的重复性
ramdom变量是基于系统时间的随机整数,重复几率很小。但是使用 余数运算(%)后,重复几率会大大提高。
例如,生成一个1-10之间的随机数字,到第5个时必然会出现重复。
因此,生成多个随机数时可能需要检验是否重复。

例子1
::生成10个不重复的整数。
@echo
:loop
set /a tnum=%random%
if not defined _%tnum% ( set s=%s%_%tnum% & set /a i+=1)
set _%tnum%=%tnum%
if not "%i%" equ "10" goto loop
echo %s%
pause

例子2
::生成5个不重复的l两位数
@echo  off
:loop
set /a tnum=10 +%random%%%90
if not defined _%tnum% ( set s=%s%_%tnum% & set /a i+=1)
set _%tnum%=%tnum%
if not "%i%" equ "5" goto loop
echo %s%
pause

(3) 读取时%random%的预处理。

在复合语句中,每个%random%都被独立扩展,能产生正确的结果
例子: echo %random% & echo %random%

在括号对中,每个%random%都被独立扩展,能产生正确的结果
例子:
if -1 (
echo %random%
echo %random%
)

在For循环主体中若存在多个%random%, 每个%random%都被独立扩展。
但是%random%的扩展只进行一次,而且扩展是发生在循环主体被执行之前。
所以循环执行时,%random%已经不存在了,而是被一个固定的数字替换了!

例子:
::以下语句会生成10个一样的“随机数”。
for /l %%a in (1,1,5) do echo %random%

要避免出现此问题,请延迟变量的扩展或使用goto循环。

例子:
::使用goto循环生成10个随机数
:loop
set /a a+=1
echo %random%
if not a==5 goto loop

例子:
::使用延迟扩展来生成10个随机数。

setlocal enabledelayedexpansion
for /l %%a in (1,1,5) do echo !random!

思考题:
生成由一个不包含重复数字的6位数(注意首位不能为0)。

时间: 2025-01-10 23:55:01

转载:在批处理中使用随机数字的相关文章

Javascript中,数学方法可以分成以下几类: constans(常数)、power functions(乘方函数)、trigonometic functions(三角函数)、rounding functions(舍入函数)、random numbers(随机数字)

在Javascript中,数学方法可以分成以下几类: constans(常数).power functions(乘方函数).trigonometic functions(三角函数).rounding functions(舍入函数).random numbers(随机数字) 常数和乘方函数 Math.E 自然对数的底(为常数) 2.718 Math.LN10 10的自然对数 2.302 Math.LN2 2的自然对数 0.693 Math.PI 圆周率 3.1415 Math.SQRT1_2 1/

转载解决:错误的语法:”XXXX“必须是批处理中仅有的语句

SQL Server 数据库提示“错误的语法:”XXXX“必须是批处理中仅有的语句”报错的原因分析 解析:批处理必须以 CREATE 语句开始.也就是说一个查询分析器里面只有一个批处理语句才是规范的语法.CREATE DEFAULT.CREATE FUNCTION.CREATE PROCEDURE.CREATE RULE.CREATE SCHEMA.CREATE TRIGGER 和 CREATE VIEW 语句不能在批处理中与其他语句组合使用.所有跟在该批处理后的其他语句将被解释为第一个 CRE

用struts做一个带有随机数字的图片验证登录模块

在我们平常的工作中,登录模块有一个小的功能,就是图片验证模块,今天我就把步骤一步一步写出来. 1.新建一个web service,然后再WebRoot写,一个contentType="image/jpeg"格式的image.jsp页面,最后一句代码是将页面以图片输出. 1 <%@ page language="java" pageEncoding="UTF-8"%> 2 <%@ page contentType="im

bat批处理中怎样用while循环

bat 常用命令 echo.@.call.pause.rem(小技巧:用::代替rem)是批处理文件最常用的几个命令,我们就从他们开始学起. ==== 注 =========== 首先, @ 不是一个命令, 而是DOS 批处理的一个特殊标记符, 仅用于屏蔽命令行回显. 下面是DOS命令行或批处理中可能会见到的一些特殊标记符: CR(0D) 命令行结束符 Escape(1B) ANSI转义字符引导符 Space(20) 常用的参数界定符 Tab(09) ; = 不常用的参数界定符  + COPY命

解决:错误的语法:”XXXX“必须是批处理中仅有的语句

原文:解决:错误的语法:”XXXX“必须是批处理中仅有的语句 SQL Server 数据库提示“错误的语法:”XXXX“必须是批处理中仅有的语句”报错的原因分析 解析:批处理必须以 CREATE 语句开始.也就是说一个查询分析器里面只有一个批处理语句才是规范的语法. CREATE DEFAULT.CREATE FUNCTION.CREATE PROCEDURE.CREATE RULE.CREATE SCHEMA.CREATE TRIGGER 和 CREATE VIEW 语句不能在批处理中与其他语

sql 生成唯一随机数字字符串

oracle 实现快速批量生成随机数字字符串: --表 create table RANDOM_NUMBER_TEMP ( ROW_NUM NUMBER default 0 not null, RANDOM_NUM VARCHAR2(30) not null ) --type type number_array_t is table of number index by binary_integer; --实现生成唯一随机数 PROCEDURE INIT_RANDOM_NUMBRE(P_QUAN

使用spring+html5实现安全传输随机数字密码键盘

随着互联网的飞跃式发展,移动支付已越来越受欢迎并且已成为常态,很多三方支付公司推出了很多支付方式如快捷支付.认证支付. 扫码支付等等.快捷支付和认证支付可分为移动app控件和移动HTML5网页.用户第一次使用快捷支付或认证支付进行支付的时候,需先绑定 银行卡.在绑定银行卡的过程中,需要验证银行卡信息.不同银行.不同银行卡验证的要素不一样,有些需要验证四要素,有的需要验证八要 素.对于需要验证银行卡的交易密码的情况,怎样保证交易密码的安全不被别人所窃取呢?为了保证交易密码不在传输过程中被窃取,出现

剑指Offer面试题51(Java版):数组中重复的数字

题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复的次数.请找出数组中任意一个重复的数字. 例如如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3. 解决这个问题的一个简单的方法是先把输入的数组排序.从排序的数组中找出重复的数字是件容易的事情,只需要从头到尾扫描排序后的数组就可以了.排序一个长度为n的数组需要时间为O(nlogn)时间. 还可以利用哈希表来解决这个问题,从头到尾

Java随机字符串:随机数字字符串,工具类

Java中生成随机数,字符串的工具类 1. 调用方法需要传入生成字符串的长度和需要的类型 生成随机数字 生成随机字母字符串 生成随机字符串+数字等 ......... 2. 总共8种类型,具体看工具类中的注释. 1 import java.util.Date; 2 import java.util.Random; 3 import java.util.UUID; 4 5 /** 6 * @Name RandomStringUtil 7 * @Descr 生成随机字符串 8 * @author d