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

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

[复制链接]
发表于 2009-9-27 12:30:43 | 显示全部楼层 |阅读模式
本帖最后由 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 编辑 ]
发表于 2009-9-27 14:48:13 | 显示全部楼层
先把你的完整代码贴出来看看?
发表于 2009-9-27 15:07:18 | 显示全部楼层
记得论坛前辈有很好的方法,忘记是谁的思路了。
  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
复制代码

评分

参与人数 1PB +5 技术 +1 收起 理由
strong12345 + 5 + 1 感謝版主提供代碼

查看全部评分

 楼主| 发表于 2009-10-8 11:50:30 | 显示全部楼层
小弟没有写出完整的代码,只是一直在思考方法
想到的方法也没有很理想的
不过冰疼版主的代码很不错
感谢了!
研究一下..
 楼主| 发表于 2009-10-8 12:09:53 | 显示全部楼层
  1. for /f "tokens=2 delims==" %%a in ('set _')do set "show=!show! %%a"
复制代码
這句不是很懂...?
  1. 指令   set _有何意義?
复制代码

[ 本帖最后由 strong12345 于 2009-10-8 12:11 编辑 ]
 楼主| 发表于 2009-10-8 12:13:24 | 显示全部楼层
我懂了= =....
這方法很不錯!!
发表于 2009-10-8 12:13:29 | 显示全部楼层
嘿嘿,批处理是很有个性的,
因为其他语言没有批处理的这个个性。所以还有一个方法~
http://bbs.bathome.net/viewthread.php?tid=3733 4楼

wxcute小心%random%数字重复造成的替换哦~ 量大的时候就容易缺失。
 楼主| 发表于 2009-10-8 12:22:48 | 显示全部楼层
嗯 看了  523066680 大大提供的連結
此篇寫得很不錯
討論可能重複性的問題
前輩們也有提出改善的代碼
发表于 2009-10-8 12:39:16 | 显示全部楼层
  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
复制代码
发表于 2009-10-17 08:47:39 | 显示全部楼层
  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 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 00:48 , Processed in 0.023792 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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