Board logo

标题: [数值计算] [已解决]求这个随机数的批处理的详细解释 [打印本页]

作者: 597476418    时间: 2011-8-13 13:16     标题: [已解决]求这个随机数的批处理的详细解释

本帖最后由 597476418 于 2011-8-13 19:23 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a str=123456789
  4. for /l %%i in (1 1 10) do (
  5.      set /a num=!random! %% 9+1
  6.      call set str=%%str:!num!=%%!num!
  7. )
  8. echo !str:~2,4!
  9. pause
复制代码

作者: CUer    时间: 2011-8-13 13:31

运行这个代码看看,具体哪里不懂就再问。
  1. setlocal enabledelayedexpansion
  2. set /a str=123456789
  3. for /l %%i in (1 1 10) do (
  4.     set /a num=!random! %% 9+1
  5.     echo !num!
  6.     call set str=%%str:!num!=%%!num!
  7.     echo !str!
  8.     pause
  9. )
  10. echo !str:~2,4!
  11. pause
复制代码

作者: CrLf    时间: 2011-8-13 13:32

本帖最后由 CrLf 于 2011-8-13 13:33 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a str=123456789
  4. for /l %%i in (1 1 10) do (
  5.      rem 循环十次
  6.      set /a num=!random! %% 9+1
  7.      rem 设置num的值为1~9的随机数
  8.      call set str=%%str:!num!=%%!num!
  9.      rem 把 str 变量中对对应数字放到最后
  10. )
  11. echo !str:~2,4!
  12. pause
复制代码
作用是随机打乱字符串顺序,但是这条代码在循环中使用 call,导致效率低下,除非是不得已或者特殊情况才这么用
改进:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a str=123456789
  4. for /l %%i in (9 -1 1) do (
  5.      set /a num=!random! %% %%i,next=num+1
  6.      for /f "tokens=1,2" %%x in ("!num! !next!") do set str=!str:~,%%x!!str:~%%y!!str:~%%x,1!
  7.      rem 不使用变量替换,而改用偏移
  8. )
  9. echo !str:~2,4!
  10. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2