;-- TIME_STAMP 2014-05-16 16:44:05 Global $aFiles Global $sPattern = "^#Region - TimeStamp\r\n; (\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}[^\r\n]*)\r\n#EndRegion - TimeStamp" Global $sPathTmp, $fH, $sRead, $iLen $hGui = GUICreate('TimeStamp: Ersetzen gegen neue Version', 400, 100) $inPath = GUICtrlCreateInput('', 10, 10, 310, 20) GUICtrlSendMsg($inPath, 0x1501, 0, 'Dateipfad auswählen') $btSelect = GUICtrlCreateButton('...', 325, 10, 20, 20) $btRun = GUICtrlCreateButton('Start', 350, 10, 40, 20) $lbDo = GUICtrlCreateLabel('', 10, 60, 180, 17) $lbState = GUICtrlCreateLabel('', 190, 60, 100, 17) ControlFocus($hGui, '', $btSelect) GUISetState() While 1 Switch GUIGetMsg() Case -3 Exit Case $btSelect $sPathSel = FileSelectFolder('Ordner wählen - Dateien werden rekursiv ausgelesen', @HomeDrive) If $sPathSel <> '' Then GUICtrlSetData($inPath, $sPathSel) EndIf Case $btRun If $sPathSel <> '' Then $aFiles = _GetFilesFolder_Rekursiv($sPathSel, 'au3', 0) If $aFiles[0] > 0 Then GUICtrlSetData($lbDo, 'Erstelle Sicherung...') $sPathTmp = $sPathSel & '\BAK_TimeStamp\' $iLen = StringLen($sPathSel) +1 For $i = 1 To $aFiles[0] GUICtrlSetData($lbState, $i & ' von ' & $aFiles[0]) FileCopy($aFiles[$i], $sPathTmp & StringTrimLeft($aFiles[$i], $iLen), 8) Next GUICtrlSetData($lbDo, 'Ersetze TimeStamp...') For $i = 1 To $aFiles[0] GUICtrlSetData($lbState, $i & ' von ' & $aFiles[0]) $sRead = FileRead($aFiles[$i]) $fH = FileOpen($aFiles[$i], 2) FileWrite($fH, StringRegExpReplace($sRead, $sPattern, ';-- TIME_STAMP $1')) FileClose($fH) Next EndIf EndIf EndSwitch WEnd ;================================================================================================== ; Function Name: _GetFilesFolder_Rekursiv($sPath [, $sExt='*' [, $iDir=-1 [, $iRetType=0 ,[$sDelim='0']]]]) ; Description: Recursive listing of files and/or folders ; Parameter(s): $sPath Basicpath of listing ('.' -current path, '..' -parent path) ; $sExt Extension for file selection '*' or -1 for all (Default) ; $iDir -1 Files+Folder(Default), 0 only Files, 1 only Folder ; optional: $iRetType 0 for Array, 1 for String as Return ; optional: $sDelim Delimiter for string return ; 0 -@CRLF (Default) 1 -@CR 2 -@LF 3 -';' 4 -'|' ; Return Value(s): Array (Default) or string with found pathes of files and/or folder ; Array[0] includes count of found files/folder ; Author(s): BugFix (bugfix@autoit.de) ;================================================================================================== Func _GetFilesFolder_Rekursiv($sPath, $sExt='*', $iDir=-1, $iRetType=0, $sDelim='0', $iSize=0) Global $oFSO = ObjCreate('Scripting.FileSystemObject') Global $strFiles = '' Switch $sDelim Case '1' $sDelim = @CR Case '2' $sDelim = @LF Case '3' $sDelim = ';' Case '4' $sDelim = '|' Case Else $sDelim = @CRLF EndSwitch If ($iRetType < 0) Or ($iRetType > 1) Then $iRetType = 0 If $sExt = -1 Then $sExt = '*' If ($iDir < -1) Or ($iDir > 1) Then $iDir = -1 _ShowSubFolders($oFSO.GetFolder($sPath),$sExt,$iDir,$sDelim) If $iRetType = 0 Then Local $aOut $aOut = StringSplit(StringTrimRight($strFiles, StringLen($sDelim)), $sDelim, 1) If $aOut[1] = '' Then ReDim $aOut[1] $aOut[0] = 0 EndIf If $iSize = 1 Then Local $aOut2[$aOut[0]+1][2] = [[$aOut[0]]] For $i = 1 To $aOut[0] $aOut2[$i][0] = $aOut[$i] If Not StringInStr(FileGetAttrib($aOut[$i]), 'D') Then $aOut2[$i][1] = FileGetSize($aOut[$i]) $aOut2[0][1] += $aOut2[$i][1] Else $aOut2[$i][1] = 0 EndIf Next Return $aOut2 EndIf Return $aOut Else Return StringTrimRight($strFiles, StringLen($sDelim)) EndIf EndFunc Func _ShowSubFolders($Folder, $Ext='*', $Dir=-1, $Delim=@CRLF) If Not IsDeclared("strFiles") Then Global $strFiles = '' If ($Dir = -1) Or ($Dir = 0) Then For $file In $Folder.Files If $Ext <> '*' Then If StringRight($file.Name, StringLen($Ext)) = $Ext Then _ $strFiles &= $file.Path & $Delim Else $strFiles &= $file.Path & $Delim EndIf Next EndIf For $Subfolder In $Folder.SubFolders If ($Dir = -1) Or ($Dir = 1) Then $strFiles &= $Subfolder.Path & '\' & $Delim _ShowSubFolders($Subfolder, $Ext, $Dir, $Delim) Next EndFunc