[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
同一cmd进程里的%random%是和时间扯不上一点关系,但是很不幸的是,这个始起“随机数种子”就是与从电脑开机至今的毫秒数有关。

写一个
    aaa.bat 只有一行:
echo %random%

然后,在cmd窗口运行:
for /l %a in (1,1,100) do start aaa.bat

就可以证实,不信,你把电脑的时间改变,然后再重运行一次看看。


至于:
for /l %%a in (1,1,10) do echo %random%

的每次的结果都一样,则是批处理的预处理问题。
比如,结果都显示:12345

其实就是经预处理先扩展了%random%=12345,然后得到以下式子:

for /l %a in (1,1,10) do echo 12345

当然每次结果都一样了。

[ 本帖最后由 netbenton 于 2010-11-26 23:20 编辑 ]

TOP

又测试了一下,发现,并不是与系统开机时间有关,而是直接与系统时间有关,

同样用上一面的aaaa.bat

再进行以下测试:
bbbb.bat
  1. echo; 0:00:00.00 | time
  2. ping -n 3 127.1 >nul
  3. start aaaa.bat %time%
  4. echo; 1:00:00.00 | time
  5. ping -n 3 127.1 >nul
  6. start aaaa.bat %time%
  7. echo; 2:00:00.00 | time
  8. ping -n 3 127.1 >nul
  9. start aaaa.bat %time%
  10. echo; 3:00:00.00 | time
  11. ping -n 3 127.1 >nul
  12. start aaaa.bat %time%
  13. echo; 4:00:00.00 | time
  14. ping -n 3 127.1 >nul
  15. start aaaa.bat %time%
  16. echo; 5:00:00.00 | time
  17. ping -n 3 127.1 >nul
  18. start aaaa.bat %time%
  19. echo; 6:00:00.00 | time
  20. ping -n 3 127.1 >nul
  21. start aaaa.bat %time%
  22. echo; 7:00:00.00 | time
  23. ping -n 3 127.1 >nul
  24. start aaaa.bat %time%
  25. echo; 8:00:00.00 | time
  26. ping -n 3 127.1 >nul
  27. start aaaa.bat %time%
  28. echo; 9:00:00.00 | time
  29. ping -n 3 127.1 >nul
  30. start aaaa.bat %time%
  31. echo; 10:00:00.00 | time
  32. ping -n 3 127.1 >nul
  33. start aaaa.bat %time%
  34. echo; 11:00:00.00 | time
  35. ping -n 3 127.1 >nul
  36. start aaaa.bat %time%
复制代码
可以看出,cmd 里第一次调用%random%绝对的和时间有关

再做一次实验,把 aaaa.bat再增加几行, 改成以下:
echo %random%
echo %random%
echo %random%

然后运行两次 bbbb.bat ,

哇~~~~

只要第一次调用 %random% 的结果相同则后面的全都对应的相同,可见,%random%是以上一次的结果进行一定运算所得。

TOP

返回列表