中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-23 21:36
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,274 会员排行
DOS批处理 & 脚本技术(批处理室) » 批处理中如何逐行读取文本并非将之设为变量?
可打印版本  3,732 / 23
第16楼 alfredhou 发表于 2006-04-05 15:17
初级用户 发帖 34 积分 100
3楼的大哥不好意思,我原先没看懂,现在弄明白了,你的是可以执行的。但我现在还是不懂得如何去引用变量的值。我目的是想这样:
先在a.txt中读一行,然后在b.txt中搜索,如果没有这行的内容则添上去,有的话就略过。我发觉是我原先没有表达得准确。对不起。
另外,你提到可以用goto循环,我有点明白其中的思路,也就是先读取一行,然后针对性地跳到相应的程序段。但现在我的问题是我根本不知道如何才可以读取a.txt中的一行?
用FOR是读遍了才停的,我该怎么办?
先谢谢你啦
第17楼 Climbing 发表于 2006-04-05 18:09
铂金会员 发帖 2,753 积分 6,962 来自 河北保定
是啊,很多时候把问题描述清楚是很重要的,如果你不知道如何描述问题的解决步骤,就把你想做什么说清楚。
第18楼 3742668 发表于 2006-04-05 20:57
荣誉版主 发帖 718 积分 2,013
不是我不明白,而是这楼主变幻太快。。
呵呵,你的要求变化得大。。
不想用type的话那就试试findstr+type:
findstr /v /g:b.txt a.txt >>tmp.txt
type tmp.txt >> b.txt
未经测试,理论上行得通,我想这个方法相比前面的那个方法更适合你。
第19楼 wang6610 发表于 2006-04-06 01:09
银牌会员 发帖 488 积分 1,246
有意思!
第20楼 willsort 发表于 2006-04-06 03:07
元老会员 发帖 1,512 积分 4,432
Re 3742668:

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

另外,你的代码确实富于技巧性,稍加修改即可用于提取文本中的指定行,是一个具有普遍意义的算法。
第21楼 alfredhou 发表于 2006-04-06 16:37
初级用户 发帖 34 积分 100
re:3742668
RE:3742668
大哥,谢谢你!我测试过你的方法,事实证明是可行的!万分感谢!

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

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

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

请问你有什么更好的解决方法吗?
第22楼 alfredhou 发表于 2006-04-06 16:42
初级用户 发帖 34 积分 100
RE:willsort
RE:willsort
版主你好!
你说稍加改造可以提取指定的行,可以予以明示吗?我是一个新手,实在想不出来怎么才可以实现这个目标?

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

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

谢谢
第23楼 3742668 发表于 2006-04-06 18:34
荣誉版主 发帖 718 积分 2,013
寒一个先。
其实你想实现的东东几篇回贴里面都有了,只不过你没能把它们结合起来而已。
关于你的问题:
1) 这个不算问题。
2) 用set /p tmpvar=<b.txt来获得,然后用if defined tmpvar来判断是否为空

最后,再汗一个,willsort说的稍加改造并非指的是type+findstr的那段,而是前面的for,呵呵,建议你多翻翻老贴多运行command /?。
第24楼 ke 发表于 2006-10-02 17:08
新手上路 发帖 2 积分 4
好帖,3742668版主真是热心!
上一页  1 2
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023