[Func] DirInstall
Posté : mar. 22 avr. 2014 09:54
Bonjour,
Comme vous le savez, nous ne pouvons pas faire de boucle de FileInstall avec une variable pour économiser du code, il faut écrire tous les FileInstall un par un, à la main.
C'est pourquoi j'ai créé un programme qui s'occupe de les créer pour vous, il suffit de lui indiquer les fichiers à inclure, les fichiers à exclure, les dossiers à excluse (voir aide sur le mask de _FileListToArrayRec)
Dans mon exemple, j'inclus tous les fichier, j'exclus les .au3, les .exe et deux png spécifiques, j'exclus les dossiers nommé "autre"
Comme vous le savez, nous ne pouvons pas faire de boucle de FileInstall avec une variable pour économiser du code, il faut écrire tous les FileInstall un par un, à la main.
C'est pourquoi j'ai créé un programme qui s'occupe de les créer pour vous, il suffit de lui indiquer les fichiers à inclure, les fichiers à exclure, les dossiers à excluse (voir aide sur le mask de _FileListToArrayRec)
Dans mon exemple, j'inclus tous les fichier, j'exclus les .au3, les .exe et deux png spécifiques, j'exclus les dossiers nommé "autre"
#include <File.au3>
Global $content = DirInstall("@ScriptDir", "@TempDir", "*|*.au3;*.exe;*backgroundLoading.png;*char_loading.png|autres", False)
ClipPut($content)
ConsoleWrite($content & @LF)
; ===================================================================================================================
; Func DirInstall($baseDir, $destDir, $mask = "*", $continueOnFind = True, $flag = 0)
;
; Créer une fonction contenant tous les FileInstall des fichiers demandés
;
; $baseDir = Dossier à copier
; $destDir = Dossier de destination
; $mask = Masque utilisé pour la recherche de fichier (paramètre envoyé à _FileListToArrayRec)
; $continueOnFile = Indique si l'on doit quand même exécuter les FileInstall même si le dossier de destination existe
; $flag = Indique si l'on doit écraser la destination
;
; Return:
; La fonction sous forme de string (à écrire dans un fichier, mettre dans le press papier, etc)
;
; Author: TommyDDR
; ===================================================================================================================
Func DirInstall($baseDir, $destDir, $mask = "*", $continueOnFind = True, $flag = 0)
Local $bDirTemp
Local $dDirTemp
If(StringRight($baseDir, 1) <> "\") Then $bDirTemp = $baseDir & "\"
If(StringRight($destDir, 1) <> "\") Then $dDirTemp = $destDir & "\"
Local $forCopy = TransformVar($bDirTemp)
Local $baseDir2 = StringReplace($bDirTemp, "@ScriptDir", ".")
Local $destDir2 = TransformVar($dDirTemp)
Local $bDirAff = '"' & $bDirTemp
Local $dDirAff = '"' & $dDirTemp
If($bDirTemp <> $baseDir2) Then
$bDirAff = '"' & $baseDir2
EndIf
If($dDirTemp <> $destDir2) Then
$dDirAff = $destDir & ' & "\'
EndIf
Local $folderToCopy = StringSplit($forCopy, "\", 3)
$folderToCopy = $folderToCopy[UBound($folderToCopy, 1)-2] & "\"
Local $return = "Func InstallFiles($flag = " & $flag & ")" & @CRLF
Local $fileList = _FileListToArrayRec($baseDir2, $mask, 0, 1, 1, 1)
If($flag = 0 And Not($continueOnFind)) Then
$return &= @TAB & 'If(FileExists(' & $dDirAff & $folderToCopy & '")) Then Return' & @CRLF
EndIf
$return &= @TAB & 'DirCreate(' & $dDirAff & $folderToCopy & '")' & @CRLF
For $i = 1 To $fileList[0]
If(StringInStr(FileGetAttrib($baseDir2 & $fileList[$i]), "D")) Then
$return &= @TAB & 'DirCreate(' & $dDirAff & $folderToCopy & $fileList[$i] & '")' & @CRLF
EndIf
Next
For $i = 1 To $fileList[0]
If(Not(StringInStr(FileGetAttrib($baseDir2 & $fileList[$i]), "D"))) Then
$return &= @TAB & 'FileInstall(' & $bDirAff & $fileList[$i] & '", ' & $dDirAff & $folderToCopy & $fileList[$i] & '", $flag)' & @CRLF
EndIf
Next
$return &= "EndFunc"
Return $return
EndFunc
Func TransformVar($var)
$var = StringReplace($var, "@AppDataCommonDir", @AppDataCommonDir)
$var = StringReplace($var, "@AppDataDir", @AppDataDir)
$var = StringReplace($var, "@CommonFilesDir", @CommonFilesDir)
$var = StringReplace($var, "@DesktopCommonDir", @DesktopCommonDir)
$var = StringReplace($var, "@DesktopDir", @DesktopDir)
$var = StringReplace($var, "@DocumentsCommonDir", @DocumentsCommonDir)
$var = StringReplace($var, "@FavoritesCommonDir", @FavoritesCommonDir)
$var = StringReplace($var, "@FavoritesDir", @FavoritesDir)
$var = StringReplace($var, "@HomePath", @HomePath)
$var = StringReplace($var, "@LocalAppDataDir", @LocalAppDataDir)
$var = StringReplace($var, "@MyDocumentsDir", @MyDocumentsDir)
$var = StringReplace($var, "@ProgramFilesDir", @ProgramFilesDir)
$var = StringReplace($var, "@ProgramsCommonDir", @ProgramsCommonDir)
$var = StringReplace($var, "@ProgramsDir", @ProgramsDir)
$var = StringReplace($var, "@ScriptDir", @ScriptDir)
$var = StringReplace($var, "@ScriptFullPath", @ScriptFullPath)
$var = StringReplace($var, "@ScriptName", @ScriptName)
$var = StringReplace($var, "@StartMenuCommonDir", @StartMenuCommonDir)
$var = StringReplace($var, "@StartMenuDir", @StartMenuDir)
$var = StringReplace($var, "@StartupCommonDir", @StartupCommonDir)
$var = StringReplace($var, "@StartupDir", @StartupDir)
$var = StringReplace($var, "@TempDir", @TempDir)
Return $var
EndFunc
Global $content = DirInstall("@ScriptDir", "@TempDir", "*|*.au3;*.exe;*backgroundLoading.png;*char_loading.png|autres", False)
ClipPut($content)
ConsoleWrite($content & @LF)
; ===================================================================================================================
; Func DirInstall($baseDir, $destDir, $mask = "*", $continueOnFind = True, $flag = 0)
;
; Créer une fonction contenant tous les FileInstall des fichiers demandés
;
; $baseDir = Dossier à copier
; $destDir = Dossier de destination
; $mask = Masque utilisé pour la recherche de fichier (paramètre envoyé à _FileListToArrayRec)
; $continueOnFile = Indique si l'on doit quand même exécuter les FileInstall même si le dossier de destination existe
; $flag = Indique si l'on doit écraser la destination
;
; Return:
; La fonction sous forme de string (à écrire dans un fichier, mettre dans le press papier, etc)
;
; Author: TommyDDR
; ===================================================================================================================
Func DirInstall($baseDir, $destDir, $mask = "*", $continueOnFind = True, $flag = 0)
Local $bDirTemp
Local $dDirTemp
If(StringRight($baseDir, 1) <> "\") Then $bDirTemp = $baseDir & "\"
If(StringRight($destDir, 1) <> "\") Then $dDirTemp = $destDir & "\"
Local $forCopy = TransformVar($bDirTemp)
Local $baseDir2 = StringReplace($bDirTemp, "@ScriptDir", ".")
Local $destDir2 = TransformVar($dDirTemp)
Local $bDirAff = '"' & $bDirTemp
Local $dDirAff = '"' & $dDirTemp
If($bDirTemp <> $baseDir2) Then
$bDirAff = '"' & $baseDir2
EndIf
If($dDirTemp <> $destDir2) Then
$dDirAff = $destDir & ' & "\'
EndIf
Local $folderToCopy = StringSplit($forCopy, "\", 3)
$folderToCopy = $folderToCopy[UBound($folderToCopy, 1)-2] & "\"
Local $return = "Func InstallFiles($flag = " & $flag & ")" & @CRLF
Local $fileList = _FileListToArrayRec($baseDir2, $mask, 0, 1, 1, 1)
If($flag = 0 And Not($continueOnFind)) Then
$return &= @TAB & 'If(FileExists(' & $dDirAff & $folderToCopy & '")) Then Return' & @CRLF
EndIf
$return &= @TAB & 'DirCreate(' & $dDirAff & $folderToCopy & '")' & @CRLF
For $i = 1 To $fileList[0]
If(StringInStr(FileGetAttrib($baseDir2 & $fileList[$i]), "D")) Then
$return &= @TAB & 'DirCreate(' & $dDirAff & $folderToCopy & $fileList[$i] & '")' & @CRLF
EndIf
Next
For $i = 1 To $fileList[0]
If(Not(StringInStr(FileGetAttrib($baseDir2 & $fileList[$i]), "D"))) Then
$return &= @TAB & 'FileInstall(' & $bDirAff & $fileList[$i] & '", ' & $dDirAff & $folderToCopy & $fileList[$i] & '", $flag)' & @CRLF
EndIf
Next
$return &= "EndFunc"
Return $return
EndFunc
Func TransformVar($var)
$var = StringReplace($var, "@AppDataCommonDir", @AppDataCommonDir)
$var = StringReplace($var, "@AppDataDir", @AppDataDir)
$var = StringReplace($var, "@CommonFilesDir", @CommonFilesDir)
$var = StringReplace($var, "@DesktopCommonDir", @DesktopCommonDir)
$var = StringReplace($var, "@DesktopDir", @DesktopDir)
$var = StringReplace($var, "@DocumentsCommonDir", @DocumentsCommonDir)
$var = StringReplace($var, "@FavoritesCommonDir", @FavoritesCommonDir)
$var = StringReplace($var, "@FavoritesDir", @FavoritesDir)
$var = StringReplace($var, "@HomePath", @HomePath)
$var = StringReplace($var, "@LocalAppDataDir", @LocalAppDataDir)
$var = StringReplace($var, "@MyDocumentsDir", @MyDocumentsDir)
$var = StringReplace($var, "@ProgramFilesDir", @ProgramFilesDir)
$var = StringReplace($var, "@ProgramsCommonDir", @ProgramsCommonDir)
$var = StringReplace($var, "@ProgramsDir", @ProgramsDir)
$var = StringReplace($var, "@ScriptDir", @ScriptDir)
$var = StringReplace($var, "@ScriptFullPath", @ScriptFullPath)
$var = StringReplace($var, "@ScriptName", @ScriptName)
$var = StringReplace($var, "@StartMenuCommonDir", @StartMenuCommonDir)
$var = StringReplace($var, "@StartMenuDir", @StartMenuDir)
$var = StringReplace($var, "@StartupCommonDir", @StartupCommonDir)
$var = StringReplace($var, "@StartupDir", @StartupDir)
$var = StringReplace($var, "@TempDir", @TempDir)
Return $var
EndFunc