|
999888777
初级用户
积分 28
发帖 11
注册 2008-1-28
状态 离线
|
『楼 主』:
怎样批量替换字符串
请热心朋友帮忙写一个批处理:
把d:\*.TXT中所有的"他"换成"她".
谢谢!
[ Last edited by 999888777 on 2008-1-29 at 07:47 PM ]
|
|
2008-1-28 17:03 |
|
|
999888777
初级用户
积分 28
发帖 11
注册 2008-1-28
状态 离线
|
『第
2 楼』:
试着弄了一个,请高手修改一下,感谢!
@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 ]
|
|
2008-1-30 11:52 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
『第
3 楼』:
BAT弄这个总有点缺陷(感叹号过滤):
@echo off&setlocal enabledelayedexpansion
for /r d: %%i in (*.txt) do (
for /f "delims=" %%a in ('type "%%i"') do (
set a=%%a
set b=!a:他=她!
echo.!b!>>"%%~dpni"_已替.txt
) ) 未测试.
|
|
2008-1-30 15:05 |
|
|
999888777
初级用户
积分 28
发帖 11
注册 2008-1-28
状态 离线
|
『第
4 楼』:
谢谢!
测试了一下,出现很多*_已替.txt .
我的意思是在原来的文本中实现替换.
我上面弄的那个可以在原来的文本中实现替换,但替换的不对.
请高手修改一下好吗?
|
|
2008-1-30 21:13 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
5 楼』:
试试这个怎么样
@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
此帖被 +2 点积分 点击查看详情 评分人:【 nipo 】 | 分数: +2 | 时间:2008-4-28 20:31 |
|
|
简单!简单!再简单! |
|
2008-1-30 22:49 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
『第
6 楼』:
那你把原来文件删了,不就得了,
我的代码考虑了你原来的文件也许有用才没删.
|
|
2008-1-30 23:45 |
|
|
999888777
初级用户
积分 28
发帖 11
注册 2008-1-28
状态 离线
|
|
2008-1-31 14:09 |
|
|
hly
初级用户
积分 28
发帖 7
注册 2008-1-10 来自 江苏
状态 离线
|
『第
8 楼』:
呵呵……学习了`~~~~
|
我就是我的作品 |
|
2008-2-6 17:08 |
|
|
nipo
中级用户
积分 228
发帖 106
注册 2008-4-26
状态 离线
|
『第
9 楼』:
哈哈,终于找到了!
谢谢terse!!!
|
|
2008-4-27 20:33 |
|
|
nipo
中级用户
积分 228
发帖 106
注册 2008-4-26
状态 离线
|
『第
10 楼』:
本想给terse加分,但系统提示:
对不起,您最近 24 小时评分数超过 5 点 限制,请返回。
[ 点击这里返回上一页 ]
|
|
2008-4-27 20:35 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
『第
11 楼』:
高效代码:
@echo off
for /r d: %%i in (*.txt) do (
for /f "delims=" %%a in (%%~si) do (
set a=%%a
setlocal enabledelayedexpansion
set b=!a:他=她!
echo.!b!>>"%%~dpni"_已替.txt
endlocal
) )
此帖被 +2 点积分 点击查看详情 评分人:【 nipo 】 | 分数: +2 | 时间:2008-4-28 20:31 |
|
|
山外有山,人外有人;低调做人,努力做事。
进入网盘(各种工具)~~ 空间~~cmd学习 |
|
2008-4-27 22:53 |
|
|
nipo
中级用户
积分 228
发帖 106
注册 2008-4-26
状态 离线
|
『第
12 楼』:
非常感谢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 ]
|
|
2008-4-28 20:30 |
|
|
nipo
中级用户
积分 228
发帖 106
注册 2008-4-26
状态 离线
|
『第
13 楼』:
呵呵,我的权限只够加2分。
应该给plp626加20分,先欠着吧。等权限够了还你。
|
|
2008-4-28 20:34 |
|
|
stockghost
中级用户
积分 215
发帖 105
注册 2007-6-2
状态 离线
|
『第
14 楼』:
很少弄批处理.
如果是我来搞,就会几条简单的批命令,没办法,只能编个简单的程序来实现.
能把批处理搞成这样,着实在DOS上费了不少工夫,高,实在是高!
|
|
2008-4-28 22:16 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
『第
15 楼』:
Quote: | Originally posted by nipo at 2008-4-28 08:30 PM:
刚才试验了你的代码,真的非常高效,而且通用性强。
测试了一个比较复杂的文本,内容如下:
/////////////////////////////////////////////////////////////// ... |
|
我说的高效是只速度快,用for /r是用for /f速度的两倍,(这个你可以测试)
------------------------
这个帖子是比较早的了,以前没有掌握endlocal所以以为会对某些字符过滤,看到你回帖现在才补上
|
山外有山,人外有人;低调做人,努力做事。
进入网盘(各种工具)~~ 空间~~cmd学习 |
|
2008-4-28 22:26 |
|