本帖最后由 afan 于 2010-12-2 02:01 编辑
搜索、替换、改格式 近500个文件不到4秒,效率是不用说的,呵呵~;-----------------------以下这里需要自定义
Local $WorkDir = 'E:\Autoit3356整理\3361解压\html' ;需要搜索的目录
Local $BakDir = 'E:\Autoit3356整理\3361解压\备份\'
Local $LogFile = @ScriptDir & '\替换记录.txt'
;-----------------------自定义结束
Local $ts = TimerInit() ;返回一个时间戳(开始计算耗时)
Local $a = _FileSearchToArray($WorkDir, '*.htm') ;遍历搜索*.htm文件(包括子目录)到数组
If @error Then Exit MsgBox(48, '错误', '未搜索到文件 ')
Local $FR, $thStr, $FLog, $x = 0
For $i = 1 To $a[0]
$FR = String(FileRead($a[$i]))
If StringInStr($FR, 'charset=UTF-8"') Then ;该文件含有UTF-8字符
FileMove($a[$i], $BakDir & StringRegExpReplace($a[$i], '.+?\\html\\', ''), 9) ;备份文件及目录结构
$thStr = StringRegExpReplace($FR, '(?<=charset=)UTF-8(?=")', 'GB2312')
FileWrite($a[$i], $thStr) ;创建ANSI格式文件
$FLog &= $a[$i] & @CRLF ;做输出记录
$x += 1
EndIf
Next
Local $te = Round(TimerDiff($ts))
FileDelete($LogFile)
FileWrite($LogFile, '共修改 ' & $x & ' 个文件,耗时 ' & $te & ' 毫秒。以下为已替换并改为ANSI格式的文件:' & @CRLF & $FLog)
ShellExecute($LogFile)
Func _FileSearchToArray($sPath, $sFilter = '*.*')
If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
If Not StringInStr(FileGetAttrib($sPath), 'D') Then Return SetError(1, 0, 0) ;无此目录
If StringReplace($sFilter, ' ', '') = '' Then $sFilter = '*'
Local $sOUT = @ScriptDir & '\$$$_____temp_filelist.txt'
FileClose(FileOpen($sOUT, 2))
RunWait(@ComSpec & ' /c ' & 'dir "' & $sPath & $sFilter & '" /a:-d /b /s > ' & $sOUT, '', 0)
Local $FR = FileRead($sOUT)
FileDelete($sOUT)
Local $afilelist = StringRegExp('1' & @CRLF & $FR, '\V+', 3)
If @error Or UBound($afilelist) = 1 Then Return SetError(2, 0, 0) ;该目录无文件
$afilelist[0] = UBound($afilelist) - 1
Return $afilelist
EndFunc ;==>_FileSearchToArray
|