Añadir directorios a un script con fileinstall()

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Añadir directorios a un script con fileinstall()

Mensaje por Jonny »

Hola,

Quiero meter en un script, el contenido de varios directorios (recursos que necesitará un programa), pero que al ser bastantes archivos, sería muy pesado añadirlos de uno en uno. Por eso, había pensado en añadir cada directorio que contiene los recursos, con algo como:

Código: Seleccionar todo

FileInstall("c:\source1", "c:\Archivos de programa\MyFile\Source1")
Pero esto, según la ayuda de AutoIt no funcionaría; En la ayuda no dice nada de que se puedan añadir directorios, sólo archivos.

¿Hay alguna forma de incluir el contenido de un directorio (archivos y subdirectorios, sin límite de profundidad, y estén o no ocultos) en un script, con FileInstall() o de alguna otra forma?.

Se me ocurre a unas malas, comprimir cada directorio con 7z, ZIP, RAR... e incluirlo así, y una vez extraído, descomprimirlo. Pero eso me parece una forma de hacer trabajar más al programa, innecesaria, y que sería más lento que simplemente integrar el archivo con algo como FileInstall().

Salu2!
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Añadir directorios a un script con fileinstall()

Mensaje por Dany »

Lamentablemente tienes que meterlo de uno a uno.

puedes usar esta Herramienta que te facilitara el trabajo.

solo buscas la carpeta y te crea. el código. lo usas con cada directorio y ya.

Código: Seleccionar todo

#include <File.au3>
Global $hMain, $hEdit, $hExtension, $hDestPath, $hFlag, $hGetDir, $hCopy
Global $sDrive, $sDir, $sFName, $sExt
Global $bExcludeScriptDirLongName = True

$hMain = GUICreate('FileInstall Directory', 580, 380)
$hEdit = GUICtrlCreateEdit('', 10, 10, 560, 300)
GUICtrlCreateLabel('Extension:', 10, 318, 50, 20, 0x001)
$hExtension = GUICtrlCreateInput('*', 65, 315, 50, 20)
GUICtrlCreateLabel('Destination Path:', 120, 318, 90, 20, 0x001)
$hDestPath = GUICtrlCreateInput('@TempDir & "\"', 210, 315, 200, 20)
GUICtrlCreateLabel('Flag:', 415, 318, 30, 20, 0x001)
$hFlag = GUICtrlCreateCombo('', 445, 315, 40, 300)
GUICtrlSetData($hFlag, '0|1|', '0')
$hDirDrive = GUICtrlCreateCheckbox("Long Path", 500, 315)
$GetDir = GUICtrlCreateButton('Directory Get Files', 100, 345, 150, 30)
$hCopy = GUICtrlCreateButton('Copy Data', 310, 345, 150, 30)
GUISetState()
While 1
    Switch GUIGetMsg()
        Case - 3
            Exit
        Case $GetDir
            $Dir = FileSelectFolder('Select a directory to fileinstall', @HomeDrive)
            If Not @error Then
                $Ext = GUICtrlRead($hExtension)
                $Files = _FileListToArrayEx($Dir, '*.' & $Ext, 1)
                If IsArray($Files) Then
                    $bExcludeScriptDirLongName = (GUICtrlRead($hDirDrive) <> 1)
                    Dim $sHold = '', $sRead = GUICtrlRead($hDestPath), $nFlag = GUICtrlRead($hFlag)
                    $sHold = 'If Not FileExists(' & $sRead & ') Then' & @CRLF & _
                                '    Do' & @CRLF & _
                                '        DirCreate(' & $sRead & ')' & @CRLF & _
                                '    Until FileExists(' & $sRead & ')' & @CRLF & _
                                'EndIf' & @CRLF
                    For $iCC = 1 To UBound($Files) - 1
                        If ($bExcludeScriptDirLongName) Then
                            _PathSplit($Files[$iCC], $sDrive, $sDir, $sFName, $sExt)
                            If StringRegExpReplace(@ScriptDir, "\\+\z", "") = StringRegExpReplace($sDrive & $sDir, "\\+\z", "") Then
                                $Files[$iCC] = $sFName & $sExt
                            EndIf
                        EndIf
                        $sHold &= 'FileInstall("' & $Files[$iCC] & '", ' & $sRead & ', ' & $nFlag & ')' & @CRLF
                    Next
                    GUICtrlSetData($hEdit, '')
                    GUICtrlSetData($hEdit, StringTrimRight($sHold, 2))
                EndIf
            EndIf
        Case $hCopy
            ClipPut(GUICtrlRead($hEdit))
    EndSwitch
WEnd

Func _FileListToArrayEx($sPath, $sFilter = '*.*', $iFlag = 0, $sExclude = '', $iRecurse = False)
    If Not FileExists($sPath) Then Return SetError(1, 1, '')
    If $sFilter = -1 Or $sFilter = Default Then $sFilter = '*.*'
    If $iFlag = -1 Or $iFlag = Default Then $iFlag = 0
    If $sExclude = -1 Or $sExclude = Default Then $sExclude = ''
    Local $aBadChar[6] = ['\', '/', ':', '>', '<', '|']
    $sFilter = StringRegExpReplace($sFilter, '\s*;\s*', ';')
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    For $iCC = 0 To 5
        If StringInStr($sFilter, $aBadChar[$iCC]) Or _
            StringInStr($sExclude, $aBadChar[$iCC]) Then Return SetError(2, 2, '')
    Next
    If StringStripWS($sFilter, 8) = '' Then Return SetError(2, 2, '')
    If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, '')
    Local $oFSO = ObjCreate("Scripting.FileSystemObject"), $sTFolder
    $sTFolder = $oFSO.GetSpecialFolder(2)
    Local $hOutFile = @TempDir & $oFSO.GetTempName
    If Not StringInStr($sFilter, ';') Then $sFilter &= ';'
    Local $aSplit = StringSplit(StringStripWS($sFilter, 8), ';'), $sRead, $sHoldSplit
    For $iCC = 1 To $aSplit[0]
        If StringStripWS($aSplit[$iCC],8) = '' Then ContinueLoop
        If StringLeft($aSplit[$iCC], 1) = '.' And _
            UBound(StringSplit($aSplit[$iCC], '.')) - 2 = 1 Then $aSplit[$iCC] = '*' & $aSplit[$iCC]
        $sHoldSplit &= '"' & $sPath & $aSplit[$iCC] & '" '
    Next
    $sHoldSplit = StringTrimRight($sHoldSplit, 1)
    If $iRecurse Then
        RunWait(@Comspec & ' /c dir /b /s /a ' & $sHoldSplit & ' > "' & $hOutFile & '"', '', @SW_HIDE)
    Else
        RunWait(@ComSpec & ' /c dir /b /a ' & $sHoldSplit & ' /o-e /od > "' & $hOutFile & '"', '', @SW_HIDE)
    EndIf
    $sRead &= FileRead($hOutFile)
    If Not FileExists($hOutFile) Then Return SetError(4, 4, '')
    FileDelete($hOutFile)
    If StringStripWS($sRead, 8) = '' Then SetError(4, 4, '')
    Local $aFSplit = StringSplit(StringTrimRight(StringStripCR($sRead), 1), @LF)
    Local $sHold
    For $iCC = 1 To $aFSplit[0]
        If $sExclude And StringLeft($aFSplit[$iCC], _
            StringLen(StringReplace($sExclude, '*', ''))) = StringReplace($sExclude, '*', '') Then ContinueLoop
        Switch $iFlag
            Case 0
                If StringRegExp($aFSplit[$iCC], '\w:\\') = 0 Then
                    $sHold &= $sPath & $aFSplit[$iCC] & Chr(1)
                Else
                    $sHold &= $aFSplit[$iCC] & Chr(1)
                EndIf
            Case 1
                If StringInStr(FileGetAttrib($sPath & '\' & $aFSplit[$iCC]), 'd') = 0 And _
                    StringInStr(FileGetAttrib($aFSplit[$iCC]), 'd') = 0 Then
                    If StringRegExp($aFSplit[$iCC], '\w:\\') = 0 Then
                        $sHold &= $sPath & $aFSplit[$iCC] & Chr(1)
                    Else
                        $sHold &= $aFSplit[$iCC] & Chr(1)
                    EndIf
                EndIf
            Case 2
                If StringInStr(FileGetAttrib($sPath & '\' & $aFSplit[$iCC]), 'd') Or _
                    StringInStr(FileGetAttrib($aFSplit[$iCC]), 'd') Then
                    If StringRegExp($aFSplit[$iCC], '\w:\\') = 0 Then
                        $sHold &= $sPath & $aFSplit[$iCC] & Chr(1)
                    Else
                        $sHold &= $aFSplit[$iCC] & Chr(1)
                    EndIf
                EndIf
        EndSwitch
    Next
    If StringTrimRight($sHold, 1) Then Return StringSplit(StringTrimRight($sHold, 1), Chr(1))
    Return SetError(4, 4, '')
EndFunc

Saludos
  • ............................................Imagen
    ......................................Imagen
Responder