Code : Tout sélectionner
#include <Date.au3>
Local $logfile = "c:\bulk\NSF.log"
Local $storage = "C:\bulk\backup_test\" & @UserName & "\"
Local $hLogFile = FileOpen($logfile, 1) ;1 = append au fichier, utiliser 2 si on veut overwrite
; ##### Pour le traitement sur c:\ g:\ h:\ ################################################################################
;creation des variables de recherche a l'aide de la fonction homemade _DirGetSizeEx
FileWriteLine($hLogFile, "[" & _Now() & "] Recherche des fichiers NSF NDK et INI sur C:\ G:\ et H:\ pour l'utilisateur " & @USERNAME)
Local $aFiles = _DirGetSizeEx("c:\", "*.nsf", 1)
Local $aFilesNDK = _DirGetSizeEx("c:\", "*.ndk", 1)
Local $aFilesINI = _DirGetSizeEx("c:\", "notes.ini", 1)
Local $aFilesG = _DirGetSizeEx("\\fs1\groupes\DSTH\C - SGPI-SEFI\SGPI\PROJETS\T1200-T1299\T1206\4.0 Documents administratifs\Correspondance\", "*.nsf", 1)
Local $aFilesH = _DirGetSizeEx("\\fs2\home\SAVA0002\notes\", "*.nsf", 1)
If IsArray($aFiles) Then
FileWriteLine($hLogFile, "[" & _Now() & "] -> C:\ " & $aFiles[0][0] & " fichiers trouves pour une taille de " & _ReadableSize($aFiles[0][1]))
_ProcessNSFCopy($aFiles)
EndIf
If IsArray($aFilesINI) Then
FileWriteLine($hLogFile, "[" & _Now() & "] -> C:\ " & $aFilesINI[0][0] & " fichiers trouves pour une taille de " & _ReadableSize($aFilesINI[0][1]))
_ProcessNSFCopy($aFilesINI)
EndIf
If IsArray($aFilesNDK) Then
FileWriteLine($hLogFile, "[" & _Now() & "] -> C:\ " & $aFilesNDK[0][0] & " fichiers trouves pour une taille de " & _ReadableSize($aFilesNDK[0][1]))
_ProcessNSFCopy($aFilesNDK)
EndIf
If IsArray($aFilesG) Then
FileWriteLine($hLogFile, "[" & _Now() & "] -> G:\ " & $aFilesG[0][0] & " fichiers trouves pour une taille de " & _ReadableSize($aFilesG[0][1]))
_ProcessNSFCopyG($aFilesG)
EndIf
If IsArray($aFilesH) Then
FileWriteLine($hLogFile, "[" & _Now() & "] -> H:\ " & $aFilesH[0][0] & " fichiers trouves pour une taille de " & _ReadableSize($aFilesH[0][1]))
_ProcessNSFCopyH($aFilesH)
EndIf
; #################################################################################################################
FileWriteLine($hLogFile, "[" & _Now() & "] Fin")
Func _ProcessNSFCopy($aNSFFiles)
Local Static $x = 0
Local $suffixe
For $i = 1 To $aNSFFiles[0][0]
$sFileName = StringRegExpReplace($aNSFFiles[$i][0], "(?:-C\d+)?\.nsf$", "$1-C" & ".nsf")
If $x Then $suffixe = "_" & $x
$sFileName = StringRegExpReplace($aNSFFiles[$i][0], "(?:-C\d+)?\.nsf$", "$1-C" & $suffixe & ".nsf")
FileWriteLine($hLogFile, "[" & _Now() & "] Copie de " & $aNSFFiles[$i][0] & " (" & _ReadableSize($aNSFFiles[$i][1]) & ") => " & $storage & $sFileName&@CRLF)
If FileCopy($aNSFFiles[$i][0], $storage & $sFileName, 9) Then
$sText = "Copie effectuee avec success"
Else
$sText = "ERREUR lors de la copie du fichier"
EndIf
FileWriteLine($hLogFile, "[" & _Now() & "] " & $sText)
$x += 1
Next
EndFunc
Func _ProcessNSFCopyINI($aNSFFilesINI)
Local Static $x = 0
Local $suffixe
For $i = 1 To $aNSFFilesINI[0][0]
If $x Then $suffixe = "_" & $x
$sFileName = StringRegExpReplace($aNSFFilesINI[$i][0], "(?:-C\d+)?\.ini$", "$1-C" & $suffixe & ".ini")
FileWriteLine($hLogFile, "[" & _Now() & "] Copie de " & $aNSFFilesINI[$i][0] & " (" & _ReadableSize($aNSFFilesINI[$i][1]) & ") => " & $storage & $sFileName&@CRLF)
If FileCopy($aNSFFilesINI[$i][0], $storage & $sFileName, 9) Then
$sText = "Copie effectuee avec success"
Else
$sText = "ERREUR lors de la copie du fichier"
EndIf
FileWriteLine($hLogFile, "[" & _Now() & "] " & $sText)
$x += 1
Next
EndFunc
Func _ProcessNSFCopyNDK($aNSFFilesNDK)
Local Static $x = 0
Local $suffixe
For $i = 1 To $aNSFFilesNDK[0][0]
If $x Then $suffixe = "_" & $x
$sFileName = StringRegExpReplace($aNSFFilesNDK[$i][0], "(?:-C\d+)?\.ndk$", "$1-C" & $suffixe & ".ndk")
FileWriteLine($hLogFile, "[" & _Now() & "] Copie de " & $aNSFFilesNDK[$i][0] & " (" & _ReadableSize($aNSFFilesNDK[$i][1]) & ") => " & $storage & $sFileName&@CRLF)
If FileCopy($aNSFFilesNDK[$i][0], $storage & $sFileName, 9) Then
$sText = "Copie effectuee avec success"
Else
$sText = "ERREUR lors de la copie du fichier"
EndIf
FileWriteLine($hLogFile, "[" & _Now() & "] " & $sText)
$x += 1
Next
EndFunc
Func _ProcessNSFCopyG($aNSFFilesG)
Local Static $x = 0
Local $suffixe
For $i = 1 To $aNSFFilesG[0][0]
If $x Then $suffixe = "_" & $x
$sFileName = StringRegExpReplace($aNSFFilesG[$i][0], "(?:-C\d+)?\.nsf$", "$1-G" & $suffixe & ".nsf")
FileWriteLine($hLogFile, "[" & _Now() & "] Copie de " & $aNSFFilesG[$i][0] & " (" & _ReadableSize($aNSFFilesG[$i][1]) & ") => " & $storage & $sFileName&@CRLF)
If FileCopy($aNSFFilesG[$i][0], $storage & $sFileName, 9) Then
$sText = "Copie effectuee avec success"
Else
$sText = "ERREUR lors de la copie du fichier"
EndIf
FileWriteLine($hLogFile, "[" & _Now() & "] " & $sText)
$x += 1
Next
EndFunc
Func _ProcessNSFCopyH($aNSFFilesH)
Local Static $x = 0
Local $suffixe
For $i = 1 To $aNSFFilesH[0][0]
If $x Then $suffixe = "_" & $x
$sFileName = StringRegExpReplace($aNSFFilesH[$i][0], "(?i)^.+\\(.+)\.nsf", "$1-H" & $suffixe & ".nsf")
FileWriteLine($hLogFile, "[" & _Now() & "] Copie de " & $aNSFFilesH[$i][0] & " (" & _ReadableSize($aNSFFilesH[$i][1]) & ") => " & $storage & $sFileName&@CRLF)
If FileCopy($aNSFFilesH[$i][0], $storage & $sFileName, 9) Then
$sText = "Copie effectuee avec success"
Else
$sText = "ERREUR lors de la copie du fichier"
EndIf
FileWriteLine($hLogFile, "[" & _Now() & "] " & $sText)
$x += 1
Next
EndFunc
FileClose($hLogFile)
; #FUNCTION#====================================================================================================================
; Name ..........: _DirGetSizeEx ; Description ...: Returns the size in bytes of a file list by extension.
; Syntax ........: _DirGetSizeEx($sDir[, $sMask = "*"[, $iFlag = 0]])
; Parameters ....: $sDir - The directory to search in.
; $sMask - [optional] Filter for results. Default is "*" (all).
; Filter for result. Multiple filters must be separated by ";"
; Use "|" to separate 3 possible sets of filters: "Include|Exclude|Exclude_Folders"
; Include = Files/Folders to include (default = "*" [all])
; Exclude = Files/Folders to exclude (default = "" [none])
; Exclude_Folders = only used if $iRecur = 1 AND $iReturn <> 2 to exclude defined folders (default = "" [none])
; $iFlag - [optional] 0 (default) = Returns the size
; 1 = Extended mode is On -> returns an array that contains the file of each file (see Remarks).
; 2 = Don't get the size of files in subdirectories (recursive mode is Off)
; Return values .: Success = The size in bytes, or a single dimension array
; Failure = -1 and sets the @error flag to 1 if the path doesn't exist.
; Author ........: jguinch
; Remarks .......: If you use the extended mode then the array returned from this function is a single dimension array containing the followingelements:
; $aArray[0][0] = Files count
; $aArray[0][1] = Total files size
; $aArray[1][0] = Full name of 1st file
; $aArray[1][1] = Size of 1st file
; $aArray[2][0] = Full name of 2nd file
; $aArray[2][1] = Size of 2nd file
; $aArray[n][1] = Size of nth file
; $aArray[n][1] = Size of nth file
;===============================================================================================================================
Func _DirGetSizeEx($sDir, $sMask = "*", $iFlag = 0); OK
If NOT FileExists($sDir) Then Return SetError(1, 0, -1)
If NOT StringInStr(FileGetAttrib($sDir), "D") Then Return SetError(1, 0, -1)
Local $iExtMode = BitAND($iFlag, 1) > 0
Local $iRecMode = NOT BitAND($iFlag, 2) > 0
Local $aDirs[1] = [ StringRegExpReplace($sDir, "\\$", "") ]
Local $iCountDir = 0, $iCountFile = 0, $n = 0, $iSize = 0, $iFullSize = 0
Local $aFiles[1][2] = [[0]]
Local $hSearch, $sFileName, $sRegexFilesInclude, $sRegexFilesExclude = "^$", $sRegexFoldersExclude = "^$"
Local $sRegexMask = StringReplace( StringReplace( StringReplace($sMask, "|", "\|") , "?", "\E(?:.|.?$)\Q"), "*", "\E.*?\Q")
Local $aFilters = StringSplit($sRegexMask, "\|", 3)
$sRegexFilesInclude = "(?i)^(?:" & StringRegExpReplace(StringReplace($aFilters[0], ";", "|") , "([^|]+)", "\\Q$1\\E") & ")$"
If UBound($aFilters) > 1 Then $sRegexFilesExclude = "(?i)^(?:" & StringRegExpReplace(StringReplace($aFilters[1], ";", "|") , "([^|]+)", "\\Q$1\\E") & ")$"
If UBound($aFilters) > 2 Then $sRegexFoldersExclude = "(?i)^(?:" & StringRegExpReplace(StringReplace($aFilters[2], ";", "|") , "([^|]+)", "\\Q$1\\E") & ")$"
While 1
$hSearch = FileFindFirstFile( $aDirs[$n] & "\*.*" )
If $hSearch <> -1 Then
While 1
$sFileName = FileFindNextFile($hSearch)
If @error Then ExitLoop
If @Extended Then
If NOT StringRegExp($sFileName, $sRegexFoldersExclude) Then
$iCountDir += 1
If $iCountDir >= UBound($aDirs) Then Redim $aDirs[UBound($aDirs) * 2]
$aDirs[$iCountDir] = $aDirs[$n] & "\" & $sFileName
EndIf
Else
If StringRegExp($sFileName, $sRegexFilesInclude) AND NOT StringRegExp($sFileName, $sRegexFilesExclude) Then
$iSize = FileGetSize($aDirs[$n] & "\" &$sFileName)
$iFullSize += $iSize
If $iExtMode Then
$iCountFile += 1
If $iCountFile >= UBound($aFiles) Then Redim $aFiles[UBound($aFiles) * 2][2]
$aFiles[$iCountFile][0] = $aDirs[$n] & "\" &$sFileName
$aFiles[$iCountFile][1] = $iSize
EndIf
EndIf
EndIf
WEnd
If NOT $iRecMode Then ExitLoop
EndIf
FileClose($hSearch)
If $n = $iCountDir Then ExitLoop
$n += 1
WEnd
If NOT $iExtMode Then Return $iFullSize
Redim $aFiles[$iCountFile + 1][2]
$aFiles[0][0] = $iCountFile
$aFiles[0][1] = $iFullSize
Return $aFiles
EndFunc
Func _ReadableSize($iSize, $decimalplaces = 2)
Local $aUnites = [1024, "octets", "Ko", "Mo", "Go", "To"]
For $i = 2 To UBound($aUnites) - 1
If $iSize < $aUnites[0] Then ExitLoop
$iSize /= $aUnites[0]
Next
Return Round($iSize, $decimalplaces) & " " & $aUnites[$i - 1]
EndFunc