中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-22 05:36
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理中如何逐行读取文本并非将之设为变量? 查看 3,308 回复 23
16 发表于 2006-04-05 15:17 ·  中国 广东 广州 白云区 电信
初级用户
积分 100
发帖 34
注册 2006-04-05 05:13
20年会员
UID 53340
性别 男
状态 离线
3楼的大哥不好意思,我原先没看懂,现在弄明白了,你的是可以执行的。但我现在还是不懂得如何去引用变量的值。我目的是想这样:
先在a.txt中读一行,然后在b.txt中搜索,如果没有这行的内容则添上去,有的话就略过。我发觉是我原先没有表达得准确。对不起。
另外,你提到可以用goto循环,我有点明白其中的思路,也就是先读取一行,然后针对性地跳到相应的程序段。但现在我的问题是我根本不知道如何才可以读取a.txt中的一行?
用FOR是读遍了才停的,我该怎么办?
先谢谢你啦
17 发表于 2006-04-05 18:09 ·  中国 河北 石家庄 联通
铂金会员
★★★★
网络独行侠
积分 6,962
发帖 2,753
注册 2003-04-16 00:00
23年会员
UID 1565
性别 男
来自 河北保定
状态 离线
是啊,很多时候把问题描述清楚是很重要的,如果你不知道如何描述问题的解决步骤,就把你想做什么说清楚。
偶只喜欢回答那些标题和描述都很清晰的帖子!
如想解决问题,请认真学习“这个帖子”和“这个帖子”并努力遵守,如果可能,请告诉更多的人!
18 发表于 2006-04-05 20:57 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
不是我不明白,而是这楼主变幻太快。。
呵呵,你的要求变化得大。。
不想用type的话那就试试findstr+type:
findstr /v /g:b.txt a.txt >>tmp.txt
type tmp.txt >> b.txt
未经测试,理论上行得通,我想这个方法相比前面的那个方法更适合你。
19 发表于 2006-04-06 01:09 ·  中国 山东 菏泽 电信
银牌会员
★★★
积分 1,246
发帖 488
注册 2003-11-11 00:00
22年会员
UID 12699
性别 男
状态 离线
有意思!
20 发表于 2006-04-06 03:07 ·  中国 山西 运城 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
23年会员
UID 19
性别 男
状态 离线
Re 3742668:

估计楼主的变量,并非指环境变量,而是指for的替换变量,这样就好理解了。

另外,你的代码确实富于技巧性,稍加修改即可用于提取文本中的指定行,是一个具有普遍意义的算法。
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
21 re:3742668 发表于 2006-04-06 16:37 ·  中国 广东 广州 白云区 电信
初级用户
积分 100
发帖 34
注册 2006-04-05 05:13
20年会员
UID 53340
性别 男
状态 离线
RE:3742668
大哥,谢谢你!我测试过你的方法,事实证明是可行的!万分感谢!

此外,我在测试的时候遇到一些总是问题:

1) 如果a.txt和b.txt原先都是有内容的话,那运行第一次时结果是和预期目标一致的,但再运行多一次就不一致了。我后来发现是因为tmp.txt第一次是空的,而第二次则有内容了。于是我在你的代码后面加了一条:del tmp.txt

2)如果b.txt原先是全空没有内容的话,那么运行批处理之后它仍然是全空没有内容的,也就是说达不到预期的目标。当然,我可以事情加入一行毫不相干的内容,那就可以达到我的预期目标。但我觉得那不是正道。

请问你有什么更好的解决方法吗?
22 RE:willsort 发表于 2006-04-06 16:42 ·  中国 广东 广州 白云区 电信
初级用户
积分 100
发帖 34
注册 2006-04-05 05:13
20年会员
UID 53340
性别 男
状态 离线
RE:willsort
版主你好!
你说稍加改造可以提取指定的行,可以予以明示吗?我是一个新手,实在想不出来怎么才可以实现这个目标?

findstr /v /g:b.txt a.txt >>tmp.txt
type tmp.txt >> b.txt

请告诉我改造后的代码吗?

谢谢
23 发表于 2006-04-06 18:34 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
寒一个先。
其实你想实现的东东几篇回贴里面都有了,只不过你没能把它们结合起来而已。
关于你的问题:
1) 这个不算问题。
2) 用set /p tmpvar=<b.txt来获得,然后用if defined tmpvar来判断是否为空

最后,再汗一个,willsort说的稍加改造并非指的是type+findstr的那段,而是前面的for,呵呵,建议你多翻翻老贴多运行command /?。
24 发表于 2006-10-02 17:08 ·  中国 湖北 武汉 电信
新手上路
积分 4
发帖 2
注册 2006-09-28 11:38
19年会员
UID 63933
状态 离线
好帖,3742668版主真是热心!
论坛跳转: