中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-02 00:34
48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行
DOS批处理 & 脚本技术(批处理室) » [原创][BAT]DOS下的文本遍历和文件遍历代码(6个)
可打印版本  15,605 / 23
第1楼 willsort 发表于 2004-02-11 00:00
元老会员 发帖 1,512 积分 4,432
[原创][BAT]DOS下的文本遍历和文件遍历代码(6个)


[ Last edited by willsort on 2006-7-29 at 20:51 ]
第2楼 willsort 发表于 2004-02-11 00:00
元老会员 发帖 1,512 积分 4,432


[ Last edited by willsort on 2006-7-29 at 20:46 ]
第3楼 willsort 发表于 2004-02-11 00:00
元老会员 发帖 1,512 积分 4,432


[ Last edited by willsort on 2006-7-29 at 20:47 ]
第4楼 Kinglion 发表于 2004-02-12 00:00
铂金会员 发帖 1,924 积分 5,798 来自 金獅電腦軟體工作室
楼主真是批处理高手,也可以称为批处理专家了。佩服!佩服!
第5楼 willsort 发表于 2004-02-26 00:00
元老会员 发帖 1,512 积分 4,432





[ Last edited by willsort on 2006-7-29 at 20:47 ]
第6楼 笑傲江湖 发表于 2004-02-26 00:00
初级用户 发帖 61 积分 271
请教:
if exist filelist.txt if exist xset.asd goto loop
set info=%1
set base=%2
是什么意思?哪里可找到的关批处理操作的资料?
第7楼 willsort 发表于 2004-02-27 00:00
元老会员 发帖 1,512 积分 4,432
Re 笑傲江湖:

if exist filelist.txt if exist xset.asd goto loop
rem 如果同时存在文件 filelist.txt 和 xset.asd 则转向 loop 开始循环

set info=%1
rem 将第一参数 %1 赋给环境变量 info

set base=%2
rem 将第二参数 %2 赋给环境变量 base

  批处理操作的资料,基础知识可以从网络上的dos教程中找到,中级和高级技巧则必须依靠多看多改多编来获得。从99年以前的旧电脑杂志上应该可以找到不少关于批处理编程的技巧,本站以及一些dos论坛也往往有很多经典的批处理程序可供研摩参考。先给你一个链接吧。

http://model.chinajewelry.net/dos/dosbbs/dispbbs.asp?boardID=12&ID=8905



第8楼 龙王 发表于 2004-04-20 00:00
银牌会员 发帖 334 积分 1,186
很有用的批处理
通过这个帖子跟楼主学到不少技巧
不过有些明白
有些命令行不是很懂
还要多看几遍
如果都象你对笑傲江湖解释的那样
简直是经典教程菜鸟的福音
尽管如此还是太感谢了

第9楼 Kinglion 发表于 2004-04-21 00:00
铂金会员 发帖 1,924 积分 5,798 来自 金獅電腦軟體工作室
7 楼的地址现在应该是:
http://dos.e-stone.cn/dosbbs/dispbbs.asp?boardID=12&ID=8905
欢迎大家支持楼主。
第10楼 龙王 发表于 2004-04-21 00:00
银牌会员 发帖 334 积分 1,186
以下是引用Kinglion在2004-4-21 16:16:08的发言:
7 楼的地址现在应该是:
http://dos.e-stone.cn/dosbbs/dispbbs.asp?boardID=12&ID=8905
欢迎大家支持楼主。

太好了
感谢
第11楼 Climbing 发表于 2004-10-15 00:00
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
Re WillSort:我在Windows 20003的dos方式下试验第一个程序不能通过,但原理基本上是搞明白了。通过fc提取出第一个文件,然后通过debug修改setfile.bat第一行文件名前面的字符为set file=,然后执行该批处理获得需要的环境变量。但在2003下有这样两个问题:1、fc不能将文件与nul设备进行比较,因此可以用另一个空文件来代替。2、debug不能正确修改setfile.bat,我找不到解决办法,因为对debug太不熟悉了。
第12楼 willsort 发表于 2004-10-18 00:00
元老会员 发帖 1,512 积分 4,432


[ Last edited by willsort on 2005-8-14 at 22:44 ]
第13楼 willsort 发表于 2004-10-18 00:00
元老会员 发帖 1,512 积分 4,432


[ Last edited by willsort on 2005-8-14 at 22:48 ]
第14楼 willsort 发表于 2004-10-18 00:00
元老会员 发帖 1,512 积分 4,432
Re Climbing:

  在2000sp4 下出现类似的问题,第二个问题实际上也是fc的不兼容问题,他在按行
号显示时,每行文字前有8 个字节位,而不是dos6和win9x 下的9 个,所以解决起来也
很简单,将debug 脚本中的 e 100 'set file='改为 e 100 'set fil=' 即可。


  但是,这只是就事论事而已,以上的提到的三个批处理,只是我在dos6.22 下练兵
用的试验原型,做得很粗糙,自从今年3 月份正式转向win98 之后,使用中遇到了很多
新问题,比如文件名包含空格的问题,系统/ 隐藏属性目录的问题;在nt下使用,又遇
到了中文文件名的问题;而且由于循环体中使用了过多的文本流控制,导致了效率的严
重低下;另外,三个程序功能上和实现上并没有太大的差别,没有拆分的必要。

  综所上述,将以上代码重写就成为必须。合并代码,弥补漏洞,改善性能,书写文
档,就出现了所谓的 V2 版,这中间其实并没有花很多功夫。

  然而,一个偶然的下午,突然心血来潮,何不将visit 的命令行功能做一下增强,
比如支持多个路径、多个过滤器(filter)、多个文件列表,原想只是加一个命令行参数
分析循环,然而真正实现起来,却再次体会到了命令行的复杂,if for嵌套时冲定向输
出,判定目录时根目录与子目录的不同,for 对过滤器的低能替换(win9x/dos) ,一个
个新问题摩肩接踵,层出不穷,竟然整整耗了我大半个工作日的时间,才勉强实现了一
个粗糙的版本,这就是所谓的 V2CE 版,对与严格的测试我没有多大的信心。

  现在,再回头看我的工作,其实那个 V2CE 版其实是没有多大的应用价值。多个路
径和过滤器,完全可以通过多次调用visit 来实现,而且实际上,我们大多数情况下只
用一个路径和过滤器;而且,多参数控制带来了易用度的下降,用户总是对参数繁多的
程序有一定的心理障碍,我个人对dos 压缩软件的爱好,从高到低依次是rar,zip,arj,
易用度就是第一靠量;另外,最重要的是,多参数控制导致了代码量和复杂性的大幅提
升,这个程序一度让我钻进了if for构建的幽魂迷宫而不知南北西东,程序的可读性越
来越差,调试起来也越来越困难,同时兼容性上拉上了更多的绊马索。

  这些,就是功能提升所付出的代价,虽然这只是一个比较极端的例子,但是功能与
简洁的平衡在程序设计的其重要性可见一斑。亲和性的界面并不意味着亲和性的代码,
人性化的需求并不意味着人性化的实现,一味将使用方的复杂性转嫁给设计者(比如
Windows), 并不是一个很聪明的主意,反之亦然(比如Linux ),这尚不考虑代码功
能增强对设计方和使用方的双重施压。

  “复杂创造简单(complex makes simple)”,诚然!


[ Last edited by willsort on 2005-8-14 at 22:53 ]
第15楼 hq1966 发表于 2005-12-04 22:19
新手上路 发帖 1 积分 2 来自 hn
  好厉害,存下来认真学习。
  谢谢willsort版主。
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023