中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-02 00:22
48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,250 会员排行
DOS批处理 & 脚本技术(批处理室) » 怎么利用批处理替换文本文件中的指定内容.
可打印版本  14,009 / 23
第1楼 pengfei 发表于 2006-07-22 17:54
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
怎么利用批处理替换文本文件中的指定内容.
就是把A.TXT中的第一行字符,替换B.TXT中的###字符.
再把A.TXT中的第二行字符,替换B.TXT中的@@@字符.
一共有好几行需要替换
........................
这个能行的通吗,求高手指点.
多谢!

[ Last edited by pengfei on 2006-7-22 at 23:19 ]
第2楼 willsort 发表于 2006-07-22 19:12
元老会员 发帖 1,512 积分 4,432

───────────────── 版务记录 ─────────────────
执行:Will Sort
操作:移动主题:自 DOS疑難解答 & 問題討論(解答室)
说明:依照主题内容分类,更适合于发表在此版区
处罚:因属论坛新人,不予积分处罚,请访问 {7326}论坛新手必读,所有人的基本行为准则
───────────────── 版务记录 ─────────────────



───────────────── 版主提示 ─────────────────
为了便于论坛用户浏览和版主管理,请您修改本主题的标题,以简要叙述主题的内容或意图
如果您确认标题不需要修改,请继续回复该主题进行申辩,若申辩理由充分,将取消该通知
如果您确认标题需要修改,请点击该主题首帖下方"编辑"按钮,在编辑页面中修改标题栏
如果此通知发出三日后您仍未进行申诉或修改,将由版主进行修改,并对作者进行相应处罚
处罚为扣除8点积分,包括追回您因发表主题奖励的6分和因标题违规而惩罚性扣除的2分
在得知您做出积极恰当的回应后,版主将在三个工作日内删除本提示以消除对您的不利影响
───────────────── 版主提示 ─────────────────
第3楼 namejm 发表于 2006-07-22 20:51
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  参考了5楼doscc的写法,修改了以前的代码,请注意使用条件:


[ Last edited by namejm on 2006-7-23 at 16:29 ]
第4楼 pengfei 发表于 2006-07-22 23:13
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
呵呵~ 我试一下,辛苦了.
第5楼 doscc 发表于 2006-07-23 04:04
中级用户 发帖 93 积分 256 来自 广东
我也来一个
代码以 @ # $ 三个字符为例!
如果处理的文件更复杂. 最好用第三方工具!


[ Last edited by doscc on 2006-7-23 at 04:38 ]
第6楼 namejm 发表于 2006-07-23 08:54
荣誉版主 发帖 1,737 积分 5,226 来自 成都
Re doscc:

  你的代码确实高,用到了call :标号 参数 的格式,这点应该向你学习。看了你的代码,有些地方还不是很懂,慢慢揣摩中。呵呵,水平有限就是这样,继续揣摩中:)

  我的代码除了冒号,似乎不再惧怕任何敏感字符,只是如果要用N行内容来替换的话,势必要重复对第一行代码进行操作的代码格式,用call来解决应该是个不错的思路。哪位再来扩充一下吧。
第7楼 willsort 发表于 2006-07-23 13:12
元老会员 发帖 1,512 积分 4,432
Re namejm & doscc:

doscc 兄实现的是逐行替换,namejm 兄实现的是指定行号行替换,相对来言,前者的灵活性好,后者的效率更高。

对 namejm 兄的冒号问题,将 tokens=1,2改为tokens=1,2* 应该可以解决。不过这并不意味着可以解决所有的特殊字符问题,你最好找一个具有足够规模和复杂度的批处理代码(也可以是你的批处理自身)作为测试文本。

另外,建议将行号也作为 :_replace 的参数进行控制,以具有更大的扩展性。
第8楼 pengfei 发表于 2006-07-23 13:37
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
厉害,试了一下,能行 咱们DOS联盟真是人才济济呀.
可是我刚入门,看得我是一头雾水,求 namejm 和 doscc 兄能解释一下这些命令的具体含义和用法,我在这里先谢谢了.

[ Last edited by pengfei on 2006-7-23 at 13:43 ]
第9楼 namejm 发表于 2006-07-23 14:11
荣誉版主 发帖 1,737 积分 5,226 来自 成都
Re willsort:

  冒号的问题,用tokens=1,2*确实好用,看来for语句还得好生揣摩;将行号也作为_replace的参数来控制的建议是个好思路,只可惜自己对call :标号 参数 的格式还一知半解,还是现学5楼doscc的,版主有好的办法,不妨贴出来让我们学习学习。

  我所说的似乎不惧怕任何敏感字符,是指似乎无论A.txt或B.txt中是否含有什么敏感字符,都能处理,而不是说把@@@、###等要替换的内容换成敏感字符。可能是我描述得不够准确而让你误解了吧,也可能是我测试的文本不够复杂没有代表性。

  我测试的是以下的文本
A.txt

B.txt
第10楼 willsort 发表于 2006-07-23 14:48
元老会员 发帖 1,512 积分 4,432
Re namejm:

指定行号的参数不难设置,将set /a num+=1 改为 set num=%2,然后将行号跟在 call :_replace @@@ 之后即可。要编写健壮的代码,还需要对引入的参数进行防空和类型判断,当然对于只是内部调用的模块代码,这个要求可以适当降低。

特殊字符的抵抗问题,建议你按照我上面所说的,将你的这段批处理本身保存为A.TXt/B.TXT 进行测试,相信你会有很多发现。
第11楼 namejm 发表于 2006-07-23 15:07
荣誉版主 发帖 1,737 积分 5,226 来自 成都
  写这个代码的时候,反复的测试把我的脑袋都搞大了;拿自己写的代码保存为A.txt/B.txt来测试,妈呀,我都不认识谁是谁了。哎,碰到稍微复杂的问题,自己的脑袋就要短路,看来,当初不学理工科的选择也不是没根据呀。
  哪位老大赶紧出马吧,我顶不住了。hoho。
第12楼 doscc 发表于 2006-07-23 16:13
中级用户 发帖 93 积分 256 来自 广东
RE: namejm
兄改进后的代码. 很不错。向兄学习! 向版主学习!

RE: pengfei
代码不难. 注析较烦. 看置顶的 批处理教学.你很快就会理解的!
第13楼 pengfei 发表于 2006-07-23 18:40
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
两位兄台改写的代码完全达到我预想的要求,只是还看不懂
请问,我能不能直接在批处理中输入字符,然后按顺序替换文本中的指定字符串
过两天再来请教
多谢各位了.

[ Last edited by pengfei on 2006-7-23 at 18:41 ]
第14楼 pengfei 发表于 2006-07-26 11:34
银牌会员 发帖 485 积分 1,218 来自 湖南.娄底
请问,用SET /P直接指定一个变量%all%,在批处理中输入字符,然后用这个变量去替换文本文档中的指定字符,怎么写.
楼上两位大哥写的批处理,小弟还不怎么明白,正在学习中.
第15楼 namejm 发表于 2006-07-26 19:10
荣誉版主 发帖 1,737 积分 5,226 来自 成都
1 2  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023