返回列表 发帖
10000是没问题的,不过效率明显下降。

TOP

这里面有没有你需要的http://www.bathome.net/viewthread.php?tid=55180

TOP

回复 17# went

我想参考这个链接的代码修改,

@echo off
set "max=100"
set "min=40"
set "n=20"
set /a "a=%random%%%(%max%-%min%+1)+%min%"
echo %a%>random.txt
pause

随机数是产生了,问题是如何记录随机数字已经被使用过了。
40~100的随机数字,不重复,不遗漏。
我不知道如何利用上面的模版进行修改?

TOP

回复 18# netdzb
参考13楼代码就行了,数字不大,效率就不是问题了。

TOP

回复 19# qixiaobin0715

13楼的代码报错,测试文件都在网盘附件上面。
https://javame.lanzoui.com/iVnqFpg5vtg

%%a in (`set _`)  批处理也有linux的用法吗?

TOP

@echo off
for /f "usebackq delims=" %%a in (`dir /b *.txt`) do (
    call :f "%%a"
)
for /f "usebackq tokens=2 delims==" %%a in (`set _`) do (
    echo %%a
)
goto :END
:f
set n=%random%
if defined _%n% goto :f
set _%n%=%~1
goto :eof
:ENDCOPY
拼写错误。。。。

TOP

回复 20# netdzb


    set _ 输出 _开头的变量

TOP

回复 21# newswan

xls006.txt
xls003.txt
xls007.txt
xls002.txt
xls009.txt
xls004.txt
xls005.txt
xls001.txt
xls010.txt
xls008.txt
1

运行结果多了一个1,而且第2次运行会产生20多行数据。

TOP

回复 18# netdzb

上面帖子里有现成的
@echo off & cd /d "%~dp0"
call :getSingleRandom 40 100 20
echo 随机字符串:%randomStr%
for %%i in (%randomStr%) do echo %%i
pause&exit
REM 方法:获取单一随机数 call :getSingleRandom 最小值 最大值 随机数个数
:getSingleRandom
set "n=%~3"
set "randomStr= "
:loop
set /a "a=%random%%%(%~2-%~1+1)+%~1"
call set "newStr=%%randomStr:%a%=%%"
if "%newStr%" equ "%randomStr%" (
set "randomStr=%randomStr% %a%"
set /a "n-=1"
)
if "%n%" neq "0" goto :loop
goto :eofCOPY

TOP

回复 24# went

第2行改成下面的都是死机
call :getSingleRandom 1 100 98
call :getSingleRandom 1 100 99
call :getSingleRandom 1 100 100

=======================

call :getSingleRandom 1 100 90 可以通过。

TOP

用数字测试可以。
@echo off
for /l %%a in (40,1,100) do (
    call :f %%a
)
for /f "usebackq tokens=2 delims==" %%i in (`set #`) do (
    echo %%i
)
pause
goto :eof
:f
set n=%random%
if defined #%n% goto :f
set #%n%=%~1
goto :eof
pauseCOPY

TOP

回复 23# netdzb


    下载你发的,已测试,没有问题

TOP

1到10的随机排列
@echo off
setlocal enableDelayedExpansion
rem 1..10
for /l %%a in (1,1,10) do (
    set _%%a=x%%a
)
echo   sequences
for /l %%a in (1,1,10) do (
    echo !_%%a!
)
rem 随机
for /l %%a in (1,1,9) do (
    call :f %%a 10
)
echo   random
for /l %%a in (1,1,10) do (
    echo !_%%a!
)
goto :END
:f
set /a n=%random%%%(%2-%1+1)+%1
if %n%==%1 goto :eof
set t=!_%n%!
set _%n%=!_%1!
set _%1=%t%
goto :eof
:ENDCOPY

TOP

我觉得你可以用powershell,win7也支持
powershell -c "40..100 | Sort-Object {return Get-Random}"COPY

TOP

只取10个
powershell -c "40..100 | Sort-Object {return Get-Random} | Select-Object -First 10"COPY

TOP

返回列表