我试图批量执行任务,生成特定范围内的随机数,我已经使用下面列出的代码完成了这项任务。
set /a setvar=%random% %% 100+0
另外还应该避免一组数字,到目前为止我自己都无法实现。
我的意思是一个批处理文件,可生成1-100之间的数字,但避免使用数字10,20,30,40,50,60,70,80和90.
这有什么解决方案吗?我不知所措。
答案 0 :(得分:2)
@echo off
setlocal
:: set list of values that should be avoided
for /l %%N in (10,10,90) do (
set "_%%N=."
)
set /a setvar=%random% %% 100+1
:: if value is in the list sums the set value with
:: random value between 0 and 9 getting modulus of 9
if defined _%setvar% (
set /a setvar=setvar + %random% %% 9 + 1
)
echo %setvar%
答案 1 :(得分:2)
@ECHO OFF
SETLOCAL
:GetNumber
set /a setvar=%random% %% 100 + 1
IF %setvar% neq 100 IF %setvar:~-1%==0 GOTO getnumber
echo Random number is %setvar%
GOTO :EOF
你说你不想生产?0但是你没有说你不想要100
。该程序在没有(10 20 30 40 50 60 70 80 90)的情况下生成。如果您还想排除100,请删除IF %setvar% neq 100
答案 2 :(得分:1)
这很容易实现:
@echo off
:GetNumber
set /a Number=%random% %% 100
set /a Remainder=Number %% 10
if %Remainder% == 9 if not %Number% == 99 goto GetNumber
set /a Number+=1
echo Random number is %Number%
首先,通过将随机数除以100,并将剩余部分分配给环境变量,计算0到99范围内的随机数。
这个随机数除以10得到余数。
如果此余数为9且数字不是99,则在最后一步中添加1之后,该数字将为10,或20或30。因此,必须通过使用新的随机数再次运行整个计算来忽略数字9,19,29,39,....
答案 3 :(得分:1)
对于1-99范围内的值,只需确保最后一位数落在1-9范围内
set /a "setvar=(%random% %% 100 / 10 * 10) + (%random% %% 9 + 1)"
或者,如果范围是1-100并且100必须包含在允许值列表中
set /a "x=%random% %% 91 + 1", "x=x+(x-1)/9", "x=x-x/100"
在这种情况下,源范围1-91
(除{有问题的数字之外的1-100
)将映射到目标范围1-100
,添加相应的值以跳过排除的数字