2016-10-18 46 views
0

我正在寫一個程序,將一個程序無限複製到另一個位置。這裏是一個部分:還有什麼比%random更好嗎

@echo off 
:place 
Xcopy C:\Whatever C:\SomethingElse\%random%* 
Goto :place 

那就是它。星號在那裏,以便xcopy假定它是一個文件名,而不是一個目錄。

不幸的是,%random%在32k-37k左右的某個地方停了下來,而且它並不是真正的隨機數。爲了我的目的,我需要這個真正去永遠,或者至少到數十億。有沒有辦法做到這一點?謝謝。

+0

隨機性的重要性還是應該是唯一遞增?它應該是多少隨機數? – Simon

+0

我希望它會隨機命名範圍爲0-1,000,000,000的文件。這是因爲我的文件只需要15秒就可以複製5000次。這是一個小文件。它不一定是隨機的。 –

+0

如果隨機性不重要,只需使用一個以1爲增量的整數:'set/A i + = 1''Xcopy C:\ Whatever C:\ SomethingElse \%i%*' – Aacini

回答

0

%RANDOM%的範圍非常有限。

%RANDOM%產生從0到32,767(含)

0≤%RANDOM%的隨機整數≤32767

你可以做的就是使用其中的幾個構建複合路徑。事情是這樣的:

C:\SomethingElse\%random%\%random%\%random%\%random%* 

當然,你需要確保的是, 路徑的所有部分存在,否則複製不會成功。

0

嘗試使用Windows PowerShell Get-Random command。 @Sergio Tulentsev完全適用於%random%命令的有限16位範圍,與PowerShell命令相反,其中限制爲32位。你應該能夠以非常相似的方式達到同樣的效果。此外,在標準命令行界面中,管道在PowerShell中的效果更好 - 至少據我記憶。

我不知道這個隨機數發生器是多麼「好」,但是如果它仍然不夠隨機,你應該考慮爲隨機數編寫一個小命令行工具。無論是你的開發環境支持「好」的隨機數,或者你可以嘗試實現XOR-Shift PRNG,這與其實施工作相比是非常隨機的。

0

按照意見,如果隨機性是不是一個要求,你可以使用((10毫秒)在最近釐秒)的當前時間的組合與一些隨機:

@echo off 
:place 
:: get the current time 
set t=%time% 
:: replace : with _ for file name 
set t=%t::=_% 
Xcopy C:\Whatever C:\SomethingElse\%t%_%random%* 
goto :place 

然而,當心你的腳本應該比文件的生成速度更快。否則,你會錯過一些文件。此外,沒有保證隨機不會在相同的百分之一秒內提供相同數字的兩倍,即使這很不可能。

這將允許你每釐秒約32000個文件。

+0

@Stephan相應編輯 – Simon