中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-24 14:15
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行
DOS批处理 & 脚本技术(批处理室) » 求教:如何显示一个文本内的随机行?
可打印版本  2,405 / 20
第1楼 theoldman 发表于 2007-02-03 02:59
初级用户 发帖 16 积分 39
求教:如何显示一个文本内的随机行?
求教:如何显示一个文本内的随机行? 请DX赐教~~
ps:本人刚开始学习p处理,以后还请DX们多多指教T_T
第2楼 qjbm 发表于 2007-02-03 03:29
初级用户 发帖 44 积分 125
第3楼 ccwan 发表于 2007-02-03 03:40
金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊
to qjbm
兄的思路不错,但是代码无法处理空行,建议ECHO !r%s%!换成ECHO. !r%s%!
第4楼 qjbm 发表于 2007-02-03 04:02
初级用户 发帖 44 积分 125
ccwan

FOR /F 对文本中的空行是跳过处理的.

!r%s%!不会为空.

[ Last edited by qjbm on 2007-2-2 at 03:04 PM ]
第5楼 ccwan 发表于 2007-02-03 04:10
金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊
re qjbm
看来兄没有测试,你的代码在处理空行时会出错,显示“关闭 echo”之类的信息。
你可以找一篇文档在里面输入空行试一下就会明白了。
第6楼 namejm 发表于 2007-02-03 04:10
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  2楼的代码确实不错,但是,除了3楼所说的问题,还会存在一些缺陷:

  1、因为使用了变量延迟语句,会把文本中的感叹号忽略;
  2、普通的for语句会忽略以分号打头的行;
  3、"tokens=*" 会忽略行首的所有空格;
  4、如果行数巨大,那么,SET r!h!=%%i 会导致变量过多而出错;

  换用一种思路,可以避免如上缺陷:


  类似的问题曾经有过讨论,请看精华帖:一个关于随机获取文件名的问题.

[ Last edited by namejm on 2007-2-2 at 03:13 PM ]
第7楼 ccwan 发表于 2007-02-03 04:19
金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊
jm的代码很精简了,思路居然和我一样。^_^
只是我用的是bagpipe帖子中的more /e <test.txt ,不如版主的代码简练。
第8楼 qjbm 发表于 2007-02-03 04:29
初级用户 发帖 44 积分 125
ccwan 兄麻烦测试下.

是不是我的测试方法不对??还是有什么别的问题,

我测试的时候就没有你说的情况.

TEST.TXT


[ Last edited by qjbm on 2007-2-2 at 03:31 PM ]
第9楼 namejm 发表于 2007-02-03 04:33
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  qjbm 的 for 语句确实会跳过空行,也就是说,没有处理空行,所以,echo 语句无须换为 echo. 语句。
第10楼 qjbm 发表于 2007-02-03 04:36
初级用户 发帖 44 积分 125
2楼代码确实存在6楼所述1.2.3.4项问题.

特殊字符是批处理的一块心病.

[ Last edited by qjbm on 2007-2-2 at 03:39 PM ]
第11楼 ccwan 发表于 2007-02-03 04:38
金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊
re qjbm

请试试下面的内容
test.txt


在这段内容里没有特殊符号,只有空行。我就是拿它测试的。
第12楼 qjbm 发表于 2007-02-03 04:40
初级用户 发帖 44 积分 125
三人行,必有吾师

兄提供的测试文本中,从第3行开始,有的空行是有4个空格符,问题正出在这里.

2楼的代码确实有问题.

[ Last edited by qjbm on 2007-2-2 at 03:49 PM ]
第13楼 ccwan 发表于 2007-02-03 04:51
金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊
确实如此,我一直当作是空行的,呵呵。也就是说,兄的代码真正不能处理的是特殊字符。

但我又有一个疑问,空行不能算作是文本中的某一行吗?

[ Last edited by ccwan on 2007-2-3 at 04:55 AM ]
第14楼 namejm 发表于 2007-02-03 04:55
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  ccwan在11楼贴出来的文本看上去虽然每行都是以空行分隔,但是,实际情况并非如此,如果使用全选功能的话,就会发现 1) 到 4) 之间的空白部分存在特殊字符,从而导致echo语句报错,去掉这些特殊字符之后一切正常。
——————————————
  原来楼上两位已经发现了问题的所在,我的帖子就重复了。

[ Last edited by namejm on 2007-2-2 at 03:57 PM ]
第15楼 ccwan 发表于 2007-02-03 04:57
金牌会员 发帖 1,160 积分 2,725 来自 河北廊坊
13楼提出疑问,空行应该也是文本中的某一行,那么是否应该把它也作为随机行显示?
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023