求个替换文本内容的批处理或vbs

要求如下,把一个文本中的内容替换(a替换为1,b替换为2,c为3……),但不替换%和%、!和!之间的内容例如aba%ab%ab%ab%替换为121%ab%12%ab%最好... 要求如下,把一个文本中的内容替换(a替换为1,b替换为2,c为3……),但不替换%和%、!和!之间的内容
例如
aba%ab%ab%ab%
替换为
121%ab%12%ab%

最好能加点注释,感激不尽
我是要把a~z(大小写) 修 改 为 其 他 特 定 的 字 符 ( 并 不 是 1 2 3 4 ,只 是 暂 时 定 为 1234),并且 不 替 换 %和%, !和! 之 间 的 内 容 , 谢 谢 大 家 了

把abc%abc%abc!abc!abc
替换为123%abc%123!abc!123
展开
 我来答
314ccp
2009-01-29 · TA获得超过5625个赞
知道大有可为答主
回答量:1497
采纳率:0%
帮助的人:2149万
展开全部

按你要求测试成功,请看附图~~~~~~~~~~ 

使用说明:将你的文件命名为A.txt,运行此批处理~~~~~~ 

注意:贴出来的批处理再复制过去要删去多余的空格,否则运行错误。很奇怪贴了几次还是一样,如果你自己还是弄不好,你给我消息留下邮箱我把批处理文件发你。

@echo off&cd.>okA.txt 

for /f "delims=" %%i in ('type A.TXT') do ( 

set "str1="&set "str=%%i"&call:pd 

setlocal EnableDelayedExpansion 

for /f "delims=" %%k in ('type tmp2')do ( 

if exist tmp1 if "%%k"=="%% " ( 

(if "%%k"=="!m!" (type tmp1>>tmp3&del tmp1) else call:th) 

) else ((if "%%k"=="! " if "%%k"=="!m!" (type tmp1>>tmp3&del tmp1) else call:th)) 

if not "%%k"=="%% " if not "%%k"=="! " echo %%k>>tmp1 

if "%%k"=="%% " set "m=%% " & echo %% >>tmp3 

if "%%k"=="! " set "m=! " & call:jt 

if exist tmp1 call:th 

setlocal disableDelayedExpansion 

call:ebat 

del tmp2 

pause&start oka.txt&exit 

:pd 

setlocal EnableDelayedExpansion 

for /l %%z in (0 1 1000)do ( 

if not "!str:~%%z,1!"=="" ( 

if "!str:~%%z,1!"=="!" ( 

echo ! >>tmp2 

) else echo !str:~%%z,1! >>tmp2 

)) 

exit /b pd 

:jt 

setlocal disableDelayedExpansion 

echo ! >>tmp3&exit /b jt 

:ebat 

for /f %%k in ('type tmp3') do set "str3=%%k"&call:sm 

setlocal disableDelayedExpansion 

echo %str1% >>okA.txt 

del tmp3 &echo 处理 %str% 为 %str1% 

exit /b ebat 

:sm 

set "str1=%str1%%str3%"&exit /b sm 

:th 

for /f "delims=" %%a in ('type tmp1') do ( 

set "str2=%%a" 

::以下请自己设定a~z值-------- 

set "str2=!str2:a=1!" 

set "str2=!str2:b=2!" 

set "str2=!str2:c=3!" 

set "str2=!str2:d=4!" 

::以上请自己设定a~z值-------- 

echo !str2! >>tmp3 

del tmp1&exit/b th

参考资料: 鄙视刷分,刷分举报!!!

LaoYusheng
2009-01-25 · TA获得超过243个赞
知道小有建树答主
回答量:164
采纳率:0%
帮助的人:137万
展开全部
用批处理实现比较空难,用vbs脚本比较方便(此脚本是邪恶八进制一位朋友写的)
把一下内容保存为一文本文件,然后命名为“替换.vbs ”
然后把你要替换的文本拖到次文件上按照提示来操作即可

'批量文件字符串替换器
on error resume next
set arg=WScript.Arguments
if arg.count=0 then
msgbox "Usage:"&vbcrlf&vbcrlf&" 不要直接运行这个脚本,把需要进行字符串替换的一个或多个文件拖曳到这个脚本文件上来就可以了。",,"批量文件字符串替换器 By 千寂孤城"
wscript.quit
end if
do
content1=inputbox("请输入你要替换的字符串","批量文件字符串替换器")
if isempty(content1) then
respond=msgbox("EXIT?",1)
if respond=1 then
wscript.quit
end if
elseif content1<>"" then
exit do
end if
msgbox "你没有输入你要替换的字符串呀!",,"批量文件字符串替换器"
loop
do
content2=inputbox("想把"""&content1&"""替换成什么呀?","批量文件字符串替换器")
if isempty(content2) then
respond=msgbox("EXIT?",1)
if respond=1 then
wscript.quit
end if
else
exit do
end if
loop
set fso=createobject("scripting.filesystemobject")
for i=0 to arg.count-1
name=arg(i)
set file=fso.opentextfile(name,1)
if file.AtEndOfStream<>true then
content=file.readall
file.close
content=replace(content,content1,content2)
set file=fso.opentextfile(name,2)
file.write content
file.close
else
file.close
end if
next
msgbox "OK 替换结束!",,"批量文件字符串替换器"

参考资料: 对!!鄙视刷分,刷分举报!!!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
breakan
2009-01-24 · TA获得超过3380个赞
知道小有建树答主
回答量:1869
采纳率:0%
帮助的人:1612万
展开全部
Dim objfs,objargs

Set objargs=WScript.Arguments
If objargs.Count<>1 Then
        msgbox "请把文件拖到脚本上"
        WScript.Quit
End If

Dim fpath
fpath=objargs.Item(0)

Dim objf,c,i,str
Set objfs=CreateObject("scripting.filesystemobject")
Set objf=objfs.OpenTextFile(fpath,1,False)
Do While objf.AtEndOfStream=False
        c=objf.Read(1)
        If c>="a" And c<="c" Then
                c=Chr(Asc(c)-48)
        End If
        str=str & c
Loop
objf.Close

objfs.OpenTextFile(fpath,2,False).Write str

这个很简单我想用不着注释了,呵呵。
你说“a替换为1,b替换为2,c为3……”
这后面的点是什么意思?是接着d换为4吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fastslz
2009-01-28 · TA获得超过938个赞
知道小有建树答主
回答量:561
采纳率:100%
帮助的人:908万
展开全部
Set Fso = CreateObject("Scripting.FileSystemObject")
test="abc%ab%ab%ab%ac"& vbCrLf &"ABc%AB%AB%AB%"& vbCrLf
Set atest = Fso.OpenTextFile("D:\a.txt", 8, True)
atest.Write test
atest.Close

Set aFile = Fso.OpenTextFile("D:\a.txt", 1, True) '打开文件
Do Until aFile.AtEndOfStream '循环每行
StrLine = aFile.ReadLine '提取行内容
StrD = Split(StrLine, "%") '以%符号为分隔为StrD数组
For i = 0 To UBound(StrD) '循环数组
If (i Mod 2) = 1 Then '判断奇偶
StrNew=StrNew &"%"& StrD(i) &"%" '保留StrD数组的偶数组字符串
Else
StrTmp = StrD(i)
For z = 1 To 26
StrTmp = Replace(StrTmp,Chr(96+z),z,1,-1,1)'替换StrD数组的奇数组字符串(for循环将a~z分别替换为1~26)
StrTmp = Replace(StrTmp,Chr(48+z),z,1,-1,1)'替换StrD数组的奇数组字符串(for循环将A~Z分别替换为1~26)
Next
StrNew=StrNew &StrTmp '奇偶数组字符串合并
End If
Next
StrNew = StrNew& vbCrLf '保留换行符
Loop

aFile.Close
Set bFile = Fso.OpenTextFile("D:\a_New.txt", 8, True)'写入新文件
bFile.Write StrNew
bFile.Close
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Luma
2009-02-09 · TA获得超过9828个赞
知道大有可为答主
回答量:1647
采纳率:50%
帮助的人:1118万
展开全部
嘿嘿,【breakan - 江湖大侠 八级】的vbs验证可用,不过他没有做到【不替换%和%,!和! 之间的内容】的要求,我帮你加了这个功能,并且可以【自定义替换字符】,你看看吧

'功能:把abc%abc%abc!abc!abc替换为123%abc%123!abc!123
'Demo 为自定义字符模板,第一位1对应a,第二位2对应b,以此类推.记得只有26个字母哦,多了也不起作用

Dim Demo
Demo = "1234567+-*/|()&^$#@~"

Dim Args
Set Args=WScript.Arguments
If Args.Count<>1 Then
msgbox "请把文件拖到脚本上"
WScript.Quit
End If

Dim fpath
fpath=Args.Item(0)

Dim FSO,File,temp,str,mark
Set FSO=CreateObject("scripting.filesystemobject")
Set File=FSO.OpenTextFile(fpath,1,False)
Do While File.AtEndOfStream=False
temp=File.Read(1)
if temp = "%" or temp = "!" then '判断%!并做标记
mark = mark + 1
if mark = 2 then
mark = 0
end if
end if

if temp>="a" And temp<="z" And mark = 0 then
temp = mid(demo,Asc(temp)-96,1)
end if

str=str & temp
Loop

if mark <> 0 then
msgbox "你的%或者!没有配对,请检查!"
else
File.Close
FSO.OpenTextFile(fpath,2,False).Write str
end if
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2009-02-14
展开全部
厉害
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式