![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 12:48 |
共 48,040 主题排行 / 350,125 发帖 / 今日 0 篇 / 48,252 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 怎样批量替换字符串 |
| 可打印版本 4,823 / 19 |
| 第1楼 999888777 | 发表于 2008-01-28 17:03 |
| 初级用户 发帖 11 积分 28 | |
|
怎样批量替换字符串 请热心朋友帮忙写一个批处理:
把d:\*.TXT中所有的"他"换成"她". 谢谢! [ Last edited by 999888777 on 2008-1-29 at 07:47 PM ] |
|
| 第2楼 999888777 | 发表于 2008-01-30 11:52 |
| 初级用户 发帖 11 积分 28 | |
|
试着弄了一个,请高手修改一下,感谢!
@echo off setlocal rem 用批处理实现文本文件中指定字符串的替换 rem DPATH : 指定目录 rem FILETYPE: 指定文件类型 rem SCONTENT: 替换前的字符串 rem DCONTENT: 替换后的字符串 rem TMPFILE : 临时文件 set DPATH=D:\ set FILETYPE=*.txt set SCONTENT=他 set DCONTENT=她 set TMPFILE=%random%.tmp for /r %DPATH% %%i in (%FILETYPE%) do ( if exist %TMPFILE% (del /f/q %TMPFILE%) for /f "usebackq tokens=*" %%j in ("%%i") do ( set TMP=%%j echo !TMP:%SCONTENT%=%DCONTENT%!>nul 1>>%TMPFILE% ) move /y %TMPFILE% "%%i" ) endlocal pause [ Last edited by 999888777 on 2008-1-30 at 12:42 PM ] |
|
| 第3楼 plp626 | 发表于 2008-01-30 15:05 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
BAT弄这个总有点缺陷(感叹号过滤):
未测试. |
|
| 第4楼 999888777 | 发表于 2008-01-30 21:13 |
| 初级用户 发帖 11 积分 28 | |
|
谢谢!
测试了一下,出现很多*_已替.txt . 我的意思是在原来的文本中实现替换. 我上面弄的那个可以在原来的文本中实现替换,但替换的不对. 请高手修改一下好吗? |
|
| 第5楼 terse | 发表于 2008-01-30 22:49 |
| 银牌会员 发帖 946 积分 2,404 | |
|
试试这个怎么样
@echo off for /r %%i in (*.txt) do ( if not defined %%i set %%i=a& ( for /f "delims=" %%a in ('findstr /n .* %%i') do ( set list=%%a setlocal enabledelayedexpansion set list=!list:*:=! set list=!list:他=她! >>"%%i.tmp" echo/!list! endlocal ) move /y "%%i.tmp" "%%i" 2>NUL ) ) pause |
|
| 第6楼 plp626 | 发表于 2008-01-30 23:45 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
那你把原来文件删了,不就得了,
我的代码考虑了你原来的文件也许有用才没删. |
|
| 第7楼 999888777 | 发表于 2008-01-31 14:09 |
| 初级用户 发帖 11 积分 28 | |
|
谢谢大家!
|
|
| 第8楼 hly | 发表于 2008-02-06 17:08 |
| 初级用户 发帖 7 积分 28 来自 江苏 | |
|
呵呵……学习了`~~~~
|
|
| 第9楼 nipo | 发表于 2008-04-27 20:33 |
| 中级用户 发帖 106 积分 228 | |
|
哈哈,终于找到了!
谢谢terse!!! |
|
| 第10楼 nipo | 发表于 2008-04-27 20:35 |
| 中级用户 发帖 106 积分 228 | |
|
本想给terse加分,但系统提示:
对不起,您最近 24 小时评分数超过 5 点 限制,请返回。 [ 点击这里返回上一页 ] |
|
| 第11楼 plp626 | 发表于 2008-04-27 22:53 |
| 银牌会员 发帖 1,020 积分 2,278 | |
|
高效代码:
|
|
| 第12楼 nipo | 发表于 2008-04-28 20:30 |
| 中级用户 发帖 106 积分 228 | |
|
非常感谢plp626!!!并请教>>>> 刚才试验了你的代码,真的非常高效,而且通用性强。
测试了一个比较复杂的文本,内容如下: //////////////////////////////////////////////////////////////////////////////////////// "Time" "Log Type" "Rule Name" "Action" "Direction" "Rule Type" "Adapter Zone" "Data Length" "Ethernet Source" "Ethernet Dest" "Ethernet Type" "IP Source" "IP Dest" "Protocol" "Port Src" "Port Dest" "2008/04/27 18:11:03" "eLogType_Packet" "所有其她包" "0" "出站" "0" "FWInternetZone" "54" "01:2B:11:V5:M6:W5" "03:4E:R5:J7:U7:R6" "IP" "192.168.3.78" "124.33.15.157" "TCP" "1039" "80" "2008/04/27 18:11:03" "eLogType_Packet" "所有其她包" "0" "出站" "0" "FWInternetZone" "54" "01:2B:11:V5:M6:W5" "03:4E:R5:J7:U7:R6" "IP" "192.168.3.78" "124.33.15.157" "TCP" "1043" "80" "2008/04/27 18:11:03" "eLogType_Packet" "所有其她包" "0" "出站" "0" "FWInternetZone" "54" "01:2B:11:V5:M6:W5" "03:4E:R5:J7:U7:R6" "IP" "192.168.3.78" "124.33.15.157" "TCP" "1037" "80" "2008/04/27 18:11:03" "eLogType_Packet" "所有其她包" "0" "出站" "0" "FWInternetZone" "54" "01:2B:11:V5:M6:W5" "03:4E:R5:J7:U7:R6" "IP" "192.168.3.78" "124.33.15.157" "TCP" "1041" "80" ///////////////////////////////////////////////////////////////////////////// 测试改“她”为“他”,改“出站”为“入站”,还有数字、字母,结果都正确。而terse的代码对这个复杂文件不能实现改写。特此向你致敬、致谢!(当然也同样感谢terse,提供了够我现在用的代码,尤其是技术知识,也许是我没用好他的代码)。 测试过程中,屡次修改,中间碰到几次小问题,可能是我操作上有错误。最近一次出现这样一个错误结果:在新文本中间的空行处出现”她=他“字符串。经仔细查找,发现是源文件被改成这样。改回来之后又正常了。 不知是什么原因?我对代码含义还没弄清楚。 [ Last edited by nipo on 2008-4-28 at 09:09 PM ] |
|
| 第13楼 nipo | 发表于 2008-04-28 20:34 |
| 中级用户 发帖 106 积分 228 | |
|
呵呵,我的权限只够加2分。
应该给plp626加20分,先欠着吧。等权限够了还你。 |
|
| 第14楼 stockghost | 发表于 2008-04-28 22:16 |
| 中级用户 发帖 105 积分 215 | |
|
很少弄批处理.
如果是我来搞,就会几条简单的批命令,没办法,只能编个简单的程序来实现. 能把批处理搞成这样,着实在DOS上费了不少工夫,高,实在是高! |
|
| 第15楼 plp626 | 发表于 2008-04-28 22:26 |
| 银牌会员 发帖 1,020 积分 2,278 | |
Originally posted by nipo at 2008-4-28 08:30 PM: 我说的高效是只速度快,用for /r是用for /f速度的两倍,(这个你可以测试) ------------------------ 这个帖子是比较早的了,以前没有掌握endlocal所以以为会对某些字符过滤,看到你回帖现在才补上 |
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |