Показать полную графическую версию : [решено] Поиск файлов в подпапках и их последующее копирование
D_Master
09-02-2009, 21:34
Подскажите, пожалуйста, как можно найти все txt-файлы в определенной папке (желательно бы по маске имени, дабы не задеть ненужные - файлы имеют названия типа log.%DATE%.txt)[/off] и её подпапках, скопировать в стороннюю папку и добавить в начало всех исходных файлов слово "Скопировано"?
Буду рад любым безумным идеям :)
Например так:
;8 это чтобы создать папку если не существует, 1 это перезапись файлов
$iRet = _FilesCopy_Proc("C:\Source", "C:\Dest", "log.*.txt", "Скопировано_", 8+1)
$iExtended = @extended
$iError = @error
MsgBox(64, "Results", StringFormat("ERROR:\t\t%i\nReturn:\t\t%i\nFiles Copied:\t%i", $iError, $iRet, $iExtended))
Func _FilesCopy_Proc($sSrc_Dir, $sDst_Dir, $sFile_Filter, $sFile_Prefix="", $iReplace=0)
If Not StringInStr(FileGetAttrib($sSrc_Dir), "D") Then Return SetError(1, 0, 0)
Local $iRet_Extended = 0, $sRegExp_Filter, $hSearch, $sFile_Path, $sFile_Name
$sSrc_Dir = StringRegExpReplace($sSrc_Dir, "\\+$", "")
$sDst_Dir = StringRegExpReplace($sDst_Dir, "\\+$", "")
$sRegExp_Filter = $sFile_Filter
$sRegExp_Filter = StringReplace($sRegExp_Filter, ".", "\.")
$sRegExp_Filter = "(?i)\A" & StringReplace($sRegExp_Filter, "*", ".*") & "\z"
$hSearch = FileFindFirstFile($sSrc_Dir & "\*")
While 1
$sFile_Name = FileFindNextFile($hSearch)
If @error Then ExitLoop
$sFile_Path = $sSrc_Dir & "\" & $sFile_Name
If StringInStr(FileGetAttrib($sFile_Path), "D") > 0 Then
_FilesCopy_Proc($sFile_Path, $sDst_Dir, $sFile_Filter, $sFile_Prefix, $iReplace)
$iRet_Extended += @extended
Else
If StringRegExp($sFile_Name, $sRegExp_Filter) Then _
$iRet_Extended += FileCopy($sFile_Path, $sDst_Dir & "\" & $sFile_Prefix & $sFile_Name, $iReplace)
EndIf
WEnd
Return SetExtended($iRet_Extended, FileClose($hSearch))
EndFunc
D_Master
10-02-2009, 04:22
Creat0R, супер, спасибо!!
Я чуть-чуть не так выразился - слово "Скопировано" надо было добавить в содержимое файла, т.е., открыть его для записи и написать туда :) В принципе, с переименованием даже лучше, но был бы признателен, если бы показали пример такого действия ;)
слово "Скопировано" надо было добавить в содержимое файла »
Как новую строку?
Вот так примерно:
;8 это чтобы создать папку если не существует, 1 это перезапись файлов
$iRet = _FilesCopy_Proc("C:\Source", "C:\Dest", "log.*.txt", "Скопировано", 8 + 1)
$iExtended = @extended
$iError = @error
MsgBox(64, "Results", StringFormat("ERROR:\t\t%i\nReturn:\t\t%i\nFiles Copied:\t%i", $iError, $iRet, $iExtended))
Func _FilesCopy_Proc($sSrc_Dir, $sDst_Dir, $sFile_Filter, $sFile_Prefix = "", $iReplace = 0)
If Not StringInStr(FileGetAttrib($sSrc_Dir), "D") Then Return SetError(1, 0, 0)
Local $iRet_Extended = 0, $sRegExp_Filter, $hSearch, $sFile_Path, $sFile_Name, $iFile_Copied, $sFile_Read, $hFile_Open
$sSrc_Dir = StringRegExpReplace($sSrc_Dir, "\\+$", "")
$sDst_Dir = StringRegExpReplace($sDst_Dir, "\\+$", "")
$sRegExp_Filter = $sFile_Filter
$sRegExp_Filter = StringReplace($sRegExp_Filter, ".", "\.")
$sRegExp_Filter = "(?i)\A" & StringReplace($sRegExp_Filter, "*", ".*") & "\z"
$hSearch = FileFindFirstFile($sSrc_Dir & "\*")
While 1
$sFile_Name = FileFindNextFile($hSearch)
If @error Then ExitLoop
$sFile_Path = $sSrc_Dir & "\" & $sFile_Name
If StringInStr(FileGetAttrib($sFile_Path), "D") > 0 Then
_FilesCopy_Proc($sFile_Path, $sDst_Dir, $sFile_Filter, $sFile_Prefix, $iReplace)
$iRet_Extended += @extended
Else
If StringRegExp($sFile_Name, $sRegExp_Filter) Then
$iFile_Copied = FileCopy($sFile_Path, $sDst_Dir & "\" & $sFile_Name, $iReplace)
$iRet_Extended += $iFile_Copied
If $iFile_Copied Then
$sFile_Read = FileRead($sDst_Dir & "\" & $sFile_Name)
$hFile_Open = FileOpen($sDst_Dir & "\" & $sFile_Name, 2)
FileWrite($hFile_Open, $sFile_Prefix & @CRLF & $sFile_Read)
FileClose($hFile_Open)
EndIf
EndIf
EndIf
WEnd
Return SetExtended($iRet_Extended, FileClose($hSearch))
EndFunc
D_Master
10-02-2009, 07:32
Creat0R, самое оно!! :clapping: :clapping: Спасибо большое, не в первый раз выручаете!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC