2015-01-10 121 views
0

在我的批處理程序,我在它的中間這條線:批次隨機函數給出相同的第一輸出

set /a scramble=%random% 

這裏的問題是,每次我打開批處理文件,它給了我同樣的輸出,例如我打開它,它將%scramble%設置爲17534,下次打開它時,它非常相似,例如17546,增加了一小部分。如果我循環它,那麼只有第一個隨機數是相似的,其餘的都是隨機的。

例如我第一次運行它,它給我的數字這個名單:

23486,32645,4854

第二次它給

23498 ,26374,17322

所以只有第一個是simi LAR。

一個簡單的解決方法是將echo %random%,然後cls在批處理的開始,所以這對我來說不是問題,但我只是想知道爲什麼這是?

回答

0

cmd中的隨機數生成器使用當前時間(使用第二個分辨率)來播種prng。這個初始化每cmd實例完成一次。

因此,如果您每次都在新的cmd實例中運行批處理文件,則種子在每種情況下都非常相似。

但是,如果您在同一個cmd實例內多次啓動批處理文件,則序列不會像初始化只進行一次那麼相似。

的更多信息,可以發現here

+0

*「但是,如果你開始你的批處理文件相同的CMD實例內幾次,序列不會那麼類似初始化完成一次。」 * - 這不是我不瞭解你的觀點,特別是因爲你知道如果幾個批處理過程在同一秒內開始,它們每個都會得到相同的「隨機」序列。我認爲你的句子意思相反。 – dbenham

+0

@dbenham,取這個'x.cmd'批處理文件'@echo%random%'。現在,從命令行執行(1 1 10)中的'for/l%a'執行@start/b cmd/c x.cmd',然後在(1 1 10)do @call x中執行'for/l%a。 cmd'。 PRNG每** ** cmd進程**初始化一次,而不是每批文件執行。 *在相同的cmd實例*中產生差異 –

+0

當然 - 我有一個短暫的大腦放屁。謝謝。 – dbenham

相關問題