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

下面给出本人的解:

  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 编辑 ]
2

评分人数

    • 随风: 确实妙的很,赞! + 1
    • more: 妙!!!PB + 10 技术 + 5
***共同提高***

TOP

  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
复制代码

TOP

楼上没考虑重复的情况?
***共同提高***

TOP

考虑后如下,但效率低
  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
复制代码

TOP

原帖由 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 呢?

TOP

原帖由 mkl 于 2008-8-28 21:20 发表

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

请在我的代码的第一个for循环后加入一个set _运行看看,其实set _就是显示所有以_字符
打头的变量,具体可在cmd中键入set /?查询。
***共同提高***

TOP

16楼 方法确实巧妙,不错。。!
技术问题请到论坛发帖求助!

TOP

来一个规规矩矩的

取到一个剔除一个
  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
复制代码

TOP

楼上会存在效率问题,特别是用到了||管道符。

[ 本帖最后由 batman 于 2009-5-2 20:03 编辑 ]
***共同提高***

TOP

测试了一下,“||”管道操作虽然要比其它管道操作快,但是比起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
复制代码

TOP

  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
复制代码

TOP

返回列表