BAT或VBS删除TXT文件文件中特定字符及其前10个字符(含空格)高手求解 20

比如以下文件文件中,要删除特定字符mmmm及它前面的十个字符(不用考虑前面没有十个字符的情况)-------------------------以下以原文件-------... 比如以下文件文件中,要删除特定字符mmmm及它前面的十个字符(不用考虑前面没有十个字符的情况)
-------------------------以下以原文件-----------------------------
3ad2dad1da321daaf删除mmmmddafdd3
313dff213213rvge2dd1ammmm
31634eseedff321523151
654132132653213213215 mmmm前面有一个空格eedfdf
---------------------------以下是要得到的文件------------------------------------
3ad2dad1da3ddafdd3
313dff21321
31634eseedff321523151
654132132653前面有一个空格eedfdf
展开
 我来答
麦兜Terran
2013-08-01 · TA获得超过2571个赞
知道小有建树答主
回答量:1786
采纳率:0%
帮助的人:1163万
展开全部
on error resume next
dim file, find, replacestr,read,findstr,count,countstr,filepath,i,j,path,cd,t,tnum,msg,finename,f,tt,ff,fso
msgstr="直接按确定程序将自动指定目录为当前文件夹"
set fso=createobject("scripting.filesystemobject")
set cd=createobject("shell.application")
if cd is nothing then            '如果系统自带这个对象则直接调用吧
 set cd=nothing
 file=inputstr("请输入要处理的目标目录",msgstr)
 if file=false then quit
 if file=vbnullstring or file=msgstr then file="."
 else
 file=cd.application.browseforfolder(0,"请选择一个你要处理的目标目录",0).self.path   '创建对话框
 if file=vbnullstring then quit
end if
replacestr=inputstr("请输入要替换的字符串","mmmm")        '要删除的字符串
if replacestr=false then quit
msg=msgbox("需要另存为新的文件吗?",68,wscript.scriptname)       '[17行]          '[18行]
t=timer
if replacestr=vbnullstring then quit
for each i in fso.getfolder(file).files          '遍历文件夹
 if fso.getextensionname(i)="txt" then         '只修改txt后缀名的文件
  filepath=left(i,instrrev(i,"\"))        '分配路径
  file=mid(i,instrrev(i,"\")+1)         '分配文件
  if msg=6 then filename=filepath&"New_"&file else filename=filepath&file    '[24行],分配文件名
  'filename=filepath&file          '[25]行
  read=fso.opentextfile(i).readall        '读取文件
  countstr=split(read,replacestr)         '分配文本
  count=ubound(countstr)          '没有找到字符串,如果有则继续执行
  if count=0 then ff=ff+1:f=f&i&" -- 没有找到与 "&replacestr&" 相符的字符串"&vbcrlf
  for j=0 to ubound(countstr)         '循环查找
   find=instr(find+1,read,replacestr)       '找到匹配位置
   if find>0 then          '已找到并舍弃mmmm+前10个字
    findstr=findstr&left(countstr(j),len(countstr(j))-len(right(countstr(j),13))) '10就是前10个字符
    else
    findstr=findstr&countstr(j)       '不需要舍弃的随后补上
   end if
  next
  if ff=0 and instr(i,"处理记录_")=0 then fso.createtextfile(filename).write findstr
  findstr=empty
 end if
next
tnum=formatnumber(timer-t,2)
tt=replace(date,"/","-")
if count=0 then fso.createtextfile(filepath&"处理记录_"&ff&"个_"&tt&".txt").write f    '[44]行,没有找到的都会记录到这个文件里
if left(tnum,instrrev(tnum,"."))="." then tnum=0&tnum
msgbox "已处理完成,大约耗时 -- "&tnum&" 秒.",64,wscript.scriptname      '[46]行,提示完成时间
quit
sub quit
set cd=nothing
set fso=nothing
wscript.quit
end sub
public function inputstr(str1,str2)
inputstr=inputbox(str1,wscript.scriptname,str2)
end function
'觉得文件名麻烦而且不想新建新的文件就将17、24行整行删除并把25行第一个字"'"去掉即可
'觉得提示和处理记录多余同样可以将44、46行整行删除
'在每行代码前面加"'"也可以

 

处理结果

追问
这个代码不行吧,是编码问题
追答
是你机器有问题,你的记事本是不是编码设置不对.设置的不是ansi
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
甜美还深邃丶榜眼8
2013-07-31 · TA获得超过1329个赞
知道小有建树答主
回答量:654
采纳率:100%
帮助的人:626万
展开全部

代码不要直接复制,要下载附件,否则可能会出错

=================================(代码开始)=======================

@echo off

del /q 修改后.txt

for /f "delims=" %%i in ('type 123.txt')do (

   call set "a=%%i"

   call set "b=%%a:*mmmm=%%"

   call call set "c=%%%%a:mmmm%%b%%=%%%%"

   call set "d=%%c:~,-10%%"

   call :1

)

start 修改后.txt&exit

:1

if "%a:mmmm=%"=="%a%" (call :2) else (call :3)

goto :eof

:2

echo %a%>>修改后.txt

goto :eof

:3

echo %d%%b%>>修改后.txt

goto :eof

=================================(以上是代码)=====================

假设你要处理的原文件为123.txt,且与批处理位于同一目录


追问
您好,你的这个真的可以用啊,,,,只是还有点求您解答下,怎么批量处理啊,,,
以下是我改的,可是只能对1.txt做处理,这个文件夹下还有2.txt 3.txt。。。能不能一次性处理啊,自动生成1ok.txt 2ok.txt 3ok.txt........
===========代码写不下===
http://zhidao.baidu.com/question/575692247.html
追答

如果是严格按照数字顺序排序的话就很简单了,稍微修改一下代码就行了

当你看到“系统找不到指定的文件”时,就证明已经修改完了

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式