[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
既然rand是伪随机数,%random%当然也是伪随机数。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a x = !random!
  4. echo !x!
  5. echo;
  6. call :time t
  7. for /l %%i in (%t%, -1, 0) do (
  8.     set /a y = ((%%i * 214013 + 2531011^) ^>^> 16^) ^& 0x7fff
  9.     if !y! equ !x! (
  10.         echo %%i
  11.         call :srand %%i
  12.         call :rand z
  13.         echo !z!
  14.         echo;
  15.         for /l %%j in (1, 1, 10) do (
  16.             call :rand z
  17.             echo !z! !random!
  18.         )
  19.     )
  20.     echo;
  21.     pause & exit
  22. )
  23. :time
  24. setlocal
  25. for /f %%x in ('wmic path win32_utctime get /format:list ^| findstr .') do set %%x
  26. set /a year = year - 1900, t = (year - 70) * 365 + ((year - 1) ^>^> 2) - 17, leap = year ^& 3
  27. for /f "tokens=%month%" %%i in ("-1 30 58 89 119 150 180 211 242 272 303 333 364") do set /a t += %%i
  28. if %leap% equ 0 if %month% gtr 1 set /a t += 1
  29. set /a t += day, t *= 24, t += hour, t *= 60, t += minute, t *= 60, t += second
  30. endlocal & set %1=%t%
  31. goto :eof
  32. :srand
  33. set /a _holdrand = %1
  34. goto :eof
  35. :rand
  36. set /a _holdrand = _holdrand * 214013 + 2531011
  37. set /a %1 = (_holdrand ^>^> 16) ^& 0x7fff
  38. goto :eof
复制代码
1

评分人数

TOP

回复  Demon


    核心的那两行如何得到的, 214013 ,2531011这两个常数?
-------------------
友 ...
plp626 发表于 2012-8-30 23:26


请指点。

TOP

回复  Demon


    日期算法:
CrLf 发表于 2012-8-31 11:33
  1. @echo off
  2. call :time t
  3. echo %t%
  4. pause & exit
  5. :time
  6. setlocal
  7. for /f "skip=1 tokens=1-9" %%a in ('wmic path win32_utctime ^| findstr .') do set /a m=%%e+9,m%%=12,y=%%i-m/10,t=365*y+y/4-y/100+y/400+(m*306+5)/10+%%a-719469,t=t*86400+%%c*3600+%%d*60+%%g
  8. endlocal & set %1=%t% & goto :eof
复制代码
这种Write Only的代码是反人类的。

TOP

返回列表