Board logo

标题: [文本处理] [已解決]批处理如何最有效率的打乱字符重新排序? [打印本页]

作者: strong12345    时间: 2009-9-27 12:30     标题: [已解決]批处理如何最有效率的打乱字符重新排序?

本帖最后由 pcl_test 于 2017-6-19 12:15 编辑

例如有变量 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

希望能将他随机打乱顺序

例如变成 Q R S C D E F G A B I J K L M N O P T U V W X Y Z H

小弟是有想过是用    %random% %% 变量数     一直反去取变量排序,但是这样觉得很没有效率
500个变量就要重排500次

请问有没有更好得方法?

[ 本帖最后由 strong12345 于 2009-10-17 02:24 编辑 ]
作者: Batcher    时间: 2009-9-27 14:48

先把你的完整代码贴出来看看?
作者: wxcute    时间: 2009-9-27 15:07

记得论坛前辈有很好的方法,忘记是谁的思路了。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. 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"
  4. for %%i in (%str%)do set _!random!=%%i
  5. for /f "tokens=2 delims==" %%a in ('set _')do set "show=!show! %%a"
  6. echo %show%
  7. pause
复制代码

作者: strong12345    时间: 2009-10-8 11:50

小弟没有写出完整的代码,只是一直在思考方法
想到的方法也没有很理想的
不过冰疼版主的代码很不错
感谢了!
研究一下..
作者: strong12345    时间: 2009-10-8 12:09

  1. for /f "tokens=2 delims==" %%a in ('set _')do set "show=!show! %%a"
复制代码
這句不是很懂...?
  1. 指令   set _有何意義?
复制代码

[ 本帖最后由 strong12345 于 2009-10-8 12:11 编辑 ]
作者: strong12345    时间: 2009-10-8 12:13

我懂了= =....
這方法很不錯!!
作者: 523066680    时间: 2009-10-8 12:13

嘿嘿,批处理是很有个性的,
因为其他语言没有批处理的这个个性。所以还有一个方法~
http://bbs.bathome.net/viewthread.php?tid=3733 4楼

wxcute小心%random%数字重复造成的替换哦~ 量大的时候就容易缺失。
作者: strong12345    时间: 2009-10-8 12:22

嗯 看了  523066680 大大提供的連結
此篇寫得很不錯
討論可能重複性的問題
前輩們也有提出改善的代碼
作者: terse    时间: 2009-10-8 12:39

  1. @echo off&setlocal enabledelayedexpansion
  2. set "str=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  3. for /l %%a in (26 -1 2) do (
  4.     set /a n=!random!%%%%a
  5.        for %%b in (!n!) do for %%c in ("!str:~%%b,1!") do (
  6.            set var=!var!%%~c&set str=!str:%%~c=!
  7. ))
  8. echo !var!!str!
  9. pause
复制代码

作者: Seter    时间: 2009-10-17 08:47

  1. @echo off&setlocal enabledelayedexpansion&set "t=ABCDEFGHIJKLMNOPQRSTUVWXYZ"&set n=26
  2. for /l %%m in (0,1,50) do set/ar=!random!%%%n%&set/as=!r!+1&call,set t=%%t:~!r!,1%%%%t:~,!r!%%%%t:~!s!%%
  3. echo %t%&pause
复制代码
效率高的被人抢了 ...
糟糕,似乎没看见LS的代码...不会撞了把...

[ 本帖最后由 Seter 于 2009-10-17 08:49 编辑 ]




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