[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] [已解决]求这个随机数的批处理的详细解释

本帖最后由 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
复制代码
1

评分人数

    • CrLf: 感谢给帖子标题标注[已解决]字样PB + 2

运行这个代码看看,具体哪里不懂就再问。
  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
复制代码
1

评分人数

    • CrLf: 乐于助人技术 + 1

TOP

本帖最后由 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
复制代码
1

评分人数

TOP

返回列表