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

【练习-015】批处理随机取值练习

[复制链接]
 楼主| 发表于 2008-8-26 12:09:07 | 显示全部楼层

下面给出本人的解:

  1. @echo off&setlocal enabledelayedexpansion
  2. for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
  3.      set /a n+=1,a=!random!%%2
  4.      if !a! equ 0 (
  5.         set "_!random!!random!!random!=%%i"
  6.         ) else (
  7.         set "_!random!!random!!random!=!n!"
  8.      )
  9. )
  10. for /f "tokens=2 delims==" %%i in ('set _') do (
  11.      set /a n-=1
  12.      if !n! equ 15 pause>nul&goto :eof
  13.      set /p=%%i <nul
  14. )
复制代码

[ 本帖最后由 batman 于 2008-8-26 12:13 编辑 ]

评分

参与人数 2PB +10 技术 +5 +1 收起 理由
随风 + 1 确实妙的很,赞!
more + 10 + 5 妙!!!

查看全部评分

发表于 2008-8-27 20:15:45 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. :jj
  3. set aa=1
  4. for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
  5. set !aa!=%%i &set /a aa=!aa!+1
  6. )
  7. set va=1
  8. :tj
  9. set /a dd=%random%%%26+1 &set/a ss=%random%%%2
  10. if %ss%==0 (set/p=%dd% <nul) else set/p=!%dd%! <nul
  11. set/a va+=1
  12. if %va% lss 11 goto tj
  13. pause>nul
复制代码
 楼主| 发表于 2008-8-27 20:23:15 | 显示全部楼层
楼上没考虑重复的情况?
发表于 2008-8-28 21:02:53 | 显示全部楼层
考虑后如下,但效率低
  1. @echo off&setlocal enabledelayedexpansion
  2. :jj
  3. set aa=1 &set "bb="
  4. for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
  5. set !aa!=%%i &set /a aa=!aa!+1
  6. )
  7. set va=1
  8. :tj
  9. set /a dd=%random%%%26+1 &set/a ss=%random%%%2
  10. echo %bb% |find "%dd: =%">nul 2>nul &&goto tj
  11. set bb=%bb% %dd%
  12. if %ss%==1 (set/p=%dd% <nul) else set/p=!%dd%! <nul
  13. set/a va+=1
  14. if %va% lss 11 goto tj
  15. pause>nul
复制代码
发表于 2008-8-28 21:20:57 | 显示全部楼层
原帖由 batman 于 2008/8/26 12:09 发表
@echo off&setlocal enabledelayedexpansion
for %%i in (a b c d e f g h i j k l m n o p q r s t u v w x y z) do (
     set /a n+=1,a=!random!%%2
     if !a! equ 0 (
        set "_!random!!random!!ra ...

请问 set_ 是什么意思?还有那个 set "_!random!!random!!random!=%%i 呢?
 楼主| 发表于 2008-8-29 00:51:15 | 显示全部楼层
原帖由 mkl 于 2008-8-28 21:20 发表

请问 set_ 是什么意思?还有那个 set "_!random!!random!!random!=%%i 呢?

请在我的代码的第一个for循环后加入一个set _运行看看,其实set _就是显示所有以_字符
打头的变量,具体可在cmd中键入set /?查询。
发表于 2008-8-30 18:32:09 | 显示全部楼层
16楼 方法确实巧妙,不错。。!
发表于 2009-5-2 17:25:12 | 显示全部楼层

来一个规规矩矩的

取到一个剔除一个
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=a b c d e f g h i j k l m n o p q r s t u v w x y z "
  3. for %%i in (%str%) do (set/a #+=1,%%i=#)
  4. for /l %%a in (1,1,10) do (
  5.     set/a asc=!random!%%#*2,#-=1
  6.     for %%b in (!asc!) do (set asc=!str:~%%b,1!)
  7.     for %%b in (!asc!) do (set str=!str:%%b =!&set/a $=!random!%%2,1/$ 2>nul||set asc=!%%b!)
  8.     echo !asc!
  9. )
  10. pause
复制代码
 楼主| 发表于 2009-5-2 20:01:31 | 显示全部楼层
楼上会存在效率问题,特别是用到了||管道符。

[ 本帖最后由 batman 于 2009-5-2 20:03 编辑 ]
发表于 2009-5-2 23:31:06 | 显示全部楼层
测试了一下,“||”管道操作虽然要比其它管道操作快,但是比起if还是要慢好多,相当于if 用时的5~8倍。
改为用if 判断。综合测度速度不错。
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=a b c d e f g h i j k l m n o p q r s t u v w x y z "
  3. for %%i in (%str%) do (set/a #+=1,%%i=#)
  4. for /l %%a in (1,1,10) do (
  5.     set/a asc=!random!%%#*2,#-=1
  6.     for %%b in (!asc!) do (set asc=!str:~%%b,1!)
  7.     for %%b in (!asc!) do (set str=!str:%%b =!&set/a $=!random!%%2&if !$! equ 0 set asc=!asc!)
  8.     echo !asc!
  9. )
  10. pause
复制代码
发表于 2009-6-16 23:15:07 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=a b c d e f g h i j k l m n o p q r s t u v w x y z"
  3. for %%i in (%str%) do set/a n+=1&set "_!n!=!n! %%i"
  4. :loop
  5. set/a m=%random%%%26+1,n=%random%%%2+1
  6. if not defined #%m% (
  7.     for /f "tokens=1,2" %%1 in ("!_%m%!") do (
  8.         <nul set/p=%%%n% &set/a num+=1,#%m%=0
  9.      )
  10. )
  11. if %num% lss 10 goto loop
  12. echo/&pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 23:31 , Processed in 0.021439 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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