這種方法確保不發生碰撞,也就是生成的隨機數是唯一的:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "ARG=%~1"
set /A ARG+=0
if %ARG% LSS 1472 (goto :FEW) else (goto :MANY)
:MANY
for /L %%I in (0,1,32767) do (
set "RND_!RANDOM!=%%I"
)
set /A COUNT=0
for /F "tokens=2 delims==" %%J in ('set RND_') do (
set /A COUNT+=1
if !COUNT! GTR %ARG% goto :SKIP
ECHO copy /B nul "file%%J.txt"
)
:SKIP
goto :END
:FEW
set /A COUNT=0
:LOOP
if %COUNT% GEQ %ARG% goto :CONT
set /A COUNT+=1
set "RND_%COUNT%=%RANDOM%"
set /A TEST=COUNT-1
for /L %%I in (1,1,%TEST%) do (
if !RND_%%I! EQU !RND_%COUNT%! (
set /A COUNT-=1
)
)
goto :LOOP
:CONT
for /L %%J in (1,1,%COUNT%) do (
ECHO copy /B nul "FILE!RND_%%J!.txt"
)
goto :END
:END
endlocal
exit /B
調用上面的腳本將隨機文件的數量作爲命令行參數。
腳本中包含兩個例程,用於產生隨機數:
根據隨機文件的數量要創建,適當的程序選擇。例程:FEW
只適用於少數隨機數字;只要總數目增加,接收重複,因此該隨機數生成的所述重複的可能性使得它相當低效的。
例行:MANY
是幾個隨機數緩慢,因爲總有產生32768
項隨機序列;一旦總量增加,這種方法是整體性能更好的選擇。
所使用的限制次數1472
低於該:FEW
例程選擇僅僅是一個任意值在這裏。
有大寫在用於測試的copy
命令前綴ECHO
命令。無論何時您想要實際創建任何文件,只需將其刪除即可。
謝謝,它幫助:) – Katie
雖然這種方法將是在許多情況下足夠,要知道''RANDOM在'FOR/L'循環可能會返回重複號碼;!您可能會感興趣的[此帖](http://stackoverflow.com/q/34406594)涉及的生成隨機數的無重複... – aschipfl
@aschipfl:謝謝你的筆記 –