找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25389|回复: 2

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

[复制链接]
发表于 2011-8-13 13:16:39 | 显示全部楼层 |阅读模式
本帖最后由 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
复制代码

评分

参与人数 1PB +2 收起 理由
CrLf + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-8-13 13:31:02 | 显示全部楼层
运行这个代码看看,具体哪里不懂就再问。
  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技术 +1 收起 理由
CrLf + 1 乐于助人

查看全部评分

发表于 2011-8-13 13:32:17 | 显示全部楼层
本帖最后由 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技术 +1 收起 理由
Hello123World + 1 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 19:57 , Processed in 0.017947 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表