2015-01-03 106 views
3

我正在嘗試執行批量任務,該任務在特定範圍內生成隨機數,我已經使用下面列出的代碼完成了這些任務。%批量隨機%以及如何避免特定範圍內的特定數字?

set /a setvar=%random% %% 100+0 

另外一組數字也應該避免,到目前爲止我還無法實現。

我的意思是一個批處理文件,將1-100之間產生的數字,但避免數字10,20,30,40,50,60,70,80和90

是否有任何解決方案這個?我很茫然。

回答

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

好,但會更好的一些意見:-) – jeb

+0

@Mofi,@ jeb - 我已添加comments.And是可能的打一個案件時,9的模數爲空同時價值爲10倍。現在應該固定。 – npocmaka

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% 

首先隨機數在範圍0除以100的隨機數計算爲99和分配只是其餘是對環境變量。

該隨機數除以10得到餘數。

如果這個餘數是9並且數字不是99,那麼在上一步中加1之後,數字將是10或20或30。因此,通過使用新的隨機數再次運行整個計算,必須忽略數字9,19,29,39,...。

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

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廣告ding的準確值,以跳過排除的號碼

相關問題