我想要一个批处理文件为 99 个变量的列表分配一个随机数。但是,我不希望同一数字分配两次以上。下面的代码似乎不起作用,它向我抛出了
Divide by zero error
。我已经修改过它并在网上寻求帮助,但找不到任何帮助。
我的代码:
@echo off
setlocal enabledelayedexpansion
set /a var=99
for /l %%i in (1,1,50) do set "count_%%i=0"
for /l %%i in (1,1,%var%) do (
:rand
set /a rand=!random! %%50 +1
if !count_%%rand%%! lss 2 (
set /a var%%i=!rand!
set /a "count_%%rand%%+=1"
) else goto rand
)
for /l %%i in (1,1,%var%) do echo !var%%i!
@ECHO Off
SETLOCAL
for /l %%e in (0,1,99) do SET "var%%e="
for /l %%e in (0,1,99) do CALL :assign %%e
for /l %%e in (1,1,99) do CALL echo var%%e=%%var%%e%%
ECHO -------------------
SET var
GOTO :eof
:assign
set /a rand=%random% %% 100
if DEFINED var%rand% GOTO assign
SET /a var%rand%=1+%1/2
GOTO :EOF
只是方法上的一个小改变。
对于数字 0..99,执行
assign
子例程。
:assign
选择一个随机数 0..99,并重复该选择,直到找到 VAR??尚未分配。它将 1+%1/2
分配给 VAR??
由于
%1
的值为 0..99,因此分配给随机 var
变量的数字将为 1,1,2,2..50,50。
然后用两种不同的方式显示结果。
var0
可以直接忽略。
您的方法根本行不通,因为
code block
(带括号的命令序列)不能包含标签,因为标签终止了块。