BAT或VBS删除TXT文件文件中特定字符及其前10个字符(含空格)高手求解 20
-------------------------以下以原文件-----------------------------
3ad2dad1da321daaf删除mmmmddafdd3
313dff213213rvge2dd1ammmm
31634eseedff321523151
654132132653213213215 mmmm前面有一个空格eedfdf
---------------------------以下是要得到的文件------------------------------------
3ad2dad1da3ddafdd3
313dff21321
31634eseedff321523151
654132132653前面有一个空格eedfdf 展开
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
代码不要直接复制,要下载附件,否则可能会出错
=================================(代码开始)=======================
@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
如果是严格按照数字顺序排序的话就很简单了,稍微修改一下代码就行了
当你看到“系统找不到指定的文件”时,就证明已经修改完了