![]() |
中国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 |