楼 主
[讨论]这里的random和sort是如何导致乱序的?
发表于 2010-08-23 04:16 · 中国 广东 茂名 电信
初级用户
★★
积分 89 发帖 76 注册 2009-12-13 13:41 UID 156499 性别 男
状态 离线
看不太懂 ,拿来一起看看
这段批处理乱序文本使用的原理是什么呢?
@echo off
::说明----将文本中的所有内容无规则打乱顺序排列
@echo off
if "%1" neq "$" (
for /f "tokens=2 delims=#" %%a in ('"%~0" $^|sort' do echo %%a
pause>nul
) else for /f "delims=" %%i in (test.txt) do call echo %%random:~-1%%%%random:~-1%% #%%i
哦!
原来是sort排列了随机数 ,这里我糊涂了...
[
Last edited by gool123456 on 2010-8-23 at 14:29 ]
第 2 楼
帖子标题已修改. 太久没发帖了.标题都忘了标关键字了...
发表于 2010-08-23 04:26 · 中国 广东 茂名 电信
初级用户
★★
积分 89 发帖 76 注册 2009-12-13 13:41 UID 156499 性别 男
状态 离线
有种耐人寻味的感觉。。。
回:523066680
这是在网上搜索问题看到的.
[ Last edited by gool123456 on 2010-8-23 at 14:39 ]
第 3 楼
发表于 2010-08-23 09:40 · 中国 广东 广州 电信
银牌会员
★★★★
SuperCleaner
积分 2,362 发帖 1,133 注册 2008-02-02 21:36 UID 110072 性别 男
状态 离线
代码好像是bathome的 terse 回复的吧?
这个批处理是要双击运行的, 直接双击的时候参数是空, 也就是第一个参数不等于"$"
进入,第一个for:
for读取这条命令的数据,
('"%~0" $^|sort') ,而 %~0 $^|sort 是先调用自身,参数为$,并把结果交给sort 排序。
{ 那么现在又进了一个层次,脚本自身被调用,参数为$ ,进入第二个for ,他负责读取test.txt 每一行并在前面加一堆随机数并输出 }
在调用结束时就回到了之前,也就是 ('"%~0" $^|sort'), 这些数据因为开头的随机数被 sort 排序,排序后导致后面的数据被打乱。 然后交给for
"tokens=2 delims=#" 只读每一行取随机数后面的内容
[ Last edited by 523066680 on 2010-8-23 at 09:42 ]
第 4 楼
发表于 2010-08-23 09:45 · 中国 广东 广州 电信
银牌会员
★★★★
SuperCleaner
积分 2,362 发帖 1,133 注册 2008-02-02 21:36 UID 110072 性别 男
状态 离线
分开来应该就容易看一点了:
a.bat
@echo off
if "%1" neq "$" (
for /f "tokens=2 delims=#" %%a in ('b.bat ^|sort') do echo %%a
pause>nul
)
b.bat
@echo off
for /f "delims=" %%i in (test.txt) do call echo %%random:~-1%%%%random:~-1%% #%%i
重点是在前面加”随机数#每一行",sort对加了随机数的内容排序后导致原来的数据乱序, 然后for 读取结果 ,以#为分割,只读取第一个#之后的内容,也就是扔掉随机数并显示出来。
然后
[
Last edited by 523066680 on 2010-8-23 at 09:48 ]
论坛跳转:
— 请选择 —
站务公告 & 版主讨论
意见反馈 & 网友交流
DOS学习入门 & 精彩文章 (教学室)
DOS疑难解答 & 问题讨论 (解答室)
DOS启动盘 & LOGO技术 (启动盘室)
DOS批处理 & 脚本技术(批处理室)
DOS媒体世界 & 网络技术 (多媒体室)
DOS汉化世界 & 中文系统 (中文化室)
DOS开发编程 & 发展交流 (开发室)
DOS软件下载 & 游戏分享 (下载室)
GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区
其它操作系统综合讨论区
WinPE、PowerShell及其它命令行系统专区
贴图灌水、文学娱乐专区
网络日志(Blog)
论坛回收站
├ 链接失效,待修正