Página 1 de 1

Backup Ficheros .AU3

Publicado: 07 Feb 2014, 20:49
por kotoqu
Hola estimados.

Quiero hacer un respaldo de muchas carpetas que tienen ficheros del tipo .au3 y su correspondiente compilado en .exe, Ademas hay otros archivo .txt, excel, .. etc.

Estos son miles de archivos y por tanto su peso total son muchos GB. Pero lo que más pesa es el archivo .exe, estos archivos hacen más del 80% del peso total de los archivos a respaldar.

La pregunta es. ¿Cómo hago para hacer el respaldo de mis carpetas y archivos y dejar fuera todos los archivos .exe?
¿Existirá un script o alguna idea respecto de esto?

Saludos.

Re: Backup Ficheros .AU3

Publicado: 08 Feb 2014, 02:09
por PDF
Hola

Puedes utilizar la función FileCopy, con ella puedes copiar únicamente los ficheros au3 mediante la utilización de comodínes.

Por ejemplo tienes la carpeta Mis scripts y quieres copiar los archivos au3

Código: Seleccionar todo

FileCopy ( "c:\Mis scripts\*.au3", "c:\Backup\")
Puedes hacer lo mismo con los ficheros excel, txt..

Saludos!

Re: Backup Ficheros .AU3

Publicado: 08 Feb 2014, 02:42
por kotoqu
Gracias PDF.

Lo que planteas sería una buena opción. Lo único malo, es que estos archivos se encuentran en muchas carpetas y tendría que hacer un comodín para cada carpeta para no perder la estructura. Pero tal como tu dices, lo que planteas es la opción más concreta.

Muchas gracias.

Re: Backup Ficheros .AU3

Publicado: 08 Feb 2014, 13:48
por PDF
En ese caso lo que necesitaríamos es utilizar un script algo mas complejo, te recomiendo este enlace del foro en ingles http://www.autoitscript.com/forum/topic ... overwrite/

De allí podrías éxtraer algunas funciones interesantes como el _FileListToArray_Recursive que te puede servir para enumerar las subcarpetas..

Cuando pueda subo el codigo modificado ya que al parecer _FileListToArrayRec ya esta disponibles entre las UDFs , saludos!!

Re: Backup Ficheros .AU3

Publicado: 08 Feb 2014, 15:26
por kotoqu
Muchas gracias por la Info. Voy a ver lo que me recomiendas y cuando tenga algo encaminado te comento.

Muchas Gracias. Saludos.

Re: Backup Ficheros .AU3

Publicado: 08 Feb 2014, 20:12
por Dany
Hola. Puedes hacer algo así:


Código: Seleccionar todo

#include <File.au3>
#include <Array.au3> ; Only required to display the arrays
#include <MsgBoxConstants.au3>

Example1()
Example2()
;asi Para todos los .au3
Func Example1()
    Local $sAutoItDir = StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", Default, -1))
    If StringRight($sAutoItDir, 5) = "beta\" Then
        $sAutoItDir = StringTrimRight($sAutoItDir, 5)
    EndIf
    ConsoleWrite($sAutoItDir & @CRLF)

    ; A sorted list of all files and folders in the AutoIt installation
    Local $aArray = _FileListToArrayRec($sAutoItDir, "*.au3", 1, 1, 0)
    ConsoleWrite("Error: " & @error & " - " & " Extended: " & @extended & @CRLF)
    _ArrayDisplay($aArray, "Sorted tree")
EndFunc





;Asi para todos menos los .exe
Func Example2()
    Local $sAutoItDir = StringLeft(@AutoItExe, StringInStr(@AutoItExe, "\", Default, -1))
    If StringRight($sAutoItDir, 5) = "beta\" Then
        $sAutoItDir = StringTrimRight($sAutoItDir, 5)
    EndIf
    ConsoleWrite($sAutoItDir & @CRLF)

    ; A sorted list of all files and folders in the AutoIt installation
    Local $aArray = _FileListToArrayRec($sAutoItDir, "*|*.exe", 1, 1, 0)
    ConsoleWrite("Error: " & @error & " - " & " Extended: " & @extended & @CRLF)
    _ArrayDisplay($aArray, "Sorted tree")
EndFunc

Saludos

Re: Backup Ficheros .AU3

Publicado: 08 Feb 2014, 22:29
por PDF
Bien aquí tienes el script, bastante sencillo tu solo tienes que cambiar $SourceFolder por el directorio de tus scripts ( que por cierto debe terminar en "\") y $DestinationFolder por el directorio de respaldo ( sin "\" )

Este ejemplo copiará todo el contenido de la carpeta de origen excluyendo a los ejecutables a la carpeta de destino. Le agregué un progress para que te mostrara el progreso de la copia..

Código: Seleccionar todo

#include <File.au3>

Global $SourceFolder = "F:\AutoIt\ " ; Carpeta donde se hallan tus scripts con "\"

Global $DestinationFolder = "C:\BackUp" ; Carpeta de respaldo de tus scripts ¡¡¡¡¡¡¡ Importante no ponerle "\" !!!!!!

; Primeramente enumeramos los archivos excluyendo los ejecutables ( aquí puede modificar el 1er comodín A tu gusto dependiendo de lo que necesites copiar

Global $Array = _FileListToArrayRec($SourceFolder, "*|*.exe", 1, 1, 1, 2)

If Not IsArray($Array) Or Not $Array[1] Then Exit MsgBox(4096, 'No se encontraron archivos', 'No se encontraron archivos en ' & $SourceFolder)

ProgressOn("Copia de seguridad", "Copiando archivos", "Inicializando...", Default, Default, 16)
For $i = 1 To $Array[0]
$sPercent=(($i*100)/$Array[0])
ProgressSet($sPercent,"Copiando "&$i&" de "&$Array[0])
FileCopy($Array[$i], StringReplace($Array[$i], $SourceFolder, $DestinationFolder&"\"), 8)
Next
ProgressSet($sPercent,"Finalizando")
ProgressOff()
Espero te sirva, saludos..

Re: Backup Ficheros .AU3

Publicado: 08 Feb 2014, 22:58
por Dany
@PDF

Creo que en esta parte

Código: Seleccionar todo

If Not IsArray($Array) Or Not $Array[1] Then Exit MsgBox(4096, 'No se encontraron archivos', 'No se encontraron archivos en ' & $SourceFolder)
seria así:

Código: Seleccionar todo

If Not IsArray($Array) Or Not $Array[0] Then Exit MsgBox(4096, 'No se encontraron archivos', 'No se encontraron archivos en ' & $SourceFolder)

o simplemente así:

Código: Seleccionar todo

si  @error hago algo 

Gracias pro el Codigo muy completito :) saludos

Re: Backup Ficheros .AU3

Publicado: 08 Feb 2014, 23:40
por PDF
Tienes razón Dany, esa parte no la modifque :smt003 .. con un simple if @error ya bastaba ..

Gracias siempre es bueno cuidar hasta el mas mínimo detalle :smt033

Re: Backup Ficheros .AU3

Publicado: 09 Feb 2014, 01:24
por kotoqu
Muchachos, se pasaron, son unos capos y ademas siempre dispuestos a ayudar.
Muchísimas gracias, me ha sido de mucha utilidad.

Saludos.

Re: Backup Ficheros .AU3

Publicado: 09 Feb 2014, 01:32
por kotoqu
Me sale este error: ERROR: _FileListToArrayRec(): undefined function. Pero supongo que es porque tengo un Include File.au3 muy antiguo y no tiene esta función.

Re: Backup Ficheros .AU3

Publicado: 09 Feb 2014, 01:34
por Dany
Instálate la ultima versión estable de autoit.

http://www.autoitscript.com/site/autoit ... downloads/

Saludos

Re: Backup Ficheros .AU3

Publicado: 09 Feb 2014, 01:54
por kotoqu
Es extraño, pero la última version de autoit que es del 2014 no trae la funcion _FileListToArrayRec en el include File.

Trae esto:
; #INDEX# =======================================================================================================================
; Title .........: File
; AutoIt Version : 3.2
; Language ......: English
; Description ...: Functions that assist with files and directories.
; Author(s) .....: Brian Keene, SolidSnake, erifash, Jon, JdeB, Jeremy Landes, MrCreatoR, cdkid, Valik,Erik Pilsits, Kurt, Dale
; Dll(s) ........: shell32.dll
; ===============================================================================================================================

; #CURRENT# =====================================================================================================================
;_FileCountLines
;_FileCreate
;_FileListToArray
;_FilePrint
;_FileReadToArray
;_FileWriteFromArray
;_FileWriteLog
;_FileWriteToLine
;_PathFull
;_PathGetRelative
;_PathMake
;_PathSplit
;_ReplaceStringInFile
;_TempFile

Re: Backup Ficheros .AU3

Publicado: 09 Feb 2014, 02:13
por Dany
la ultima estable es la 3.3.10.2

_FileListToArrayRec() fue agregada en la versión 3.3.10.0 (23rd December, 2013) (Release)

Saludos

Re: Backup Ficheros .AU3

Publicado: 09 Feb 2014, 02:15
por PDF
kotoqu escribió:Es extraño, pero la última version de autoit que es del 2014 no trae la funcion _FileListToArrayRec en el include File.

Trae esto:

Código: Seleccionar todo

; #INDEX# =======================================================================================================================
; Title .........: File
; AutoIt Version : 3.2
; Language ......: English
; Description ...: Functions that assist with files and directories.
; Author(s) .....: Brian Keene, SolidSnake, erifash, Jon, JdeB, Jeremy Landes, MrCreatoR, cdkid, Valik,Erik Pilsits, Kurt, Dale
; Dll(s) ........: shell32.dll
; ===============================================================================================================================

; #CURRENT# =====================================================================================================================
;_FileCountLines
;_FileCreate
;_FileListToArray
;_FilePrint
;_FileReadToArray
;_FileWriteFromArray
;_FileWriteLog
;_FileWriteToLine
;_PathFull
;_PathGetRelative
;_PathMake
;_PathSplit
;_ReplaceStringInFile
;_TempFile
Estas seguro de que es la ultima version
. La versión 3.3.10.2 la puedes encontrar aquí http://www.autoitscript.com/site/autoit/downloads/ esta es la ultima version.

En todo caso subo el Include File.au3 por si sirve de algo..

Saludos.

Re: Backup Ficheros .AU3

Publicado: 09 Feb 2014, 04:24
por Chefito
Hay que ver lo que avanza autoit :smt001 .
En este foro re trato bastante a fondo el tema de busqueda de ficheros en directorios y subdiretorios. Fue en julio de 2008. En esa epoca no habia tantos codigos de este tipo. La verdad es que conseguimos funciones bastantes buenas. Fue un post bastante largo, con mucos codigos iterativos y recursivos. Yo hasta hice un estudio a fondo de velocidad de busqueda. Una pena que se borrase por un fallo en la base de datos del foro :smt022 .
Este tipo de funciones sirven perfectamente para hacer copias, borrados, etc de distinto tipo de archivos con un minimo de cambios en sus codigos. Aunque supongo que las que traiga autoit ya en su udf sean muy buenas, os dejo el ultimo enlace respecto a este tema que quise recuperar por otras preguntas parecidas en el foro....por si a alguien le interesa echarles un vistazo y ver el funcionamiento de la recursividad en autoit, que siempre es interesante y mas dificil de entender para los principiantes.
Mirar los enlaces del post: http://www.emesn.com/autoitforum/viewto ... vos#p14942

Saludos.

Re: Backup Ficheros .AU3

Publicado: 09 Feb 2014, 17:22
por kotoqu
Chefito Ud. es un grande que ha ayudado mucho al desarrollo de estas aplicaciones.

Respecto el tema del File.au3 ahora me funciona perfecto, sólo tenía que borrar el autoit antiguo, reiniciar y listo. Puse a correr el script a la medida de mis requerimientos y funcionó a la perfección. Fue algo sublime puesto que era justo lo que necesitaba. Así que la ayuda de Uds. ha sido primordial y le agradezco muchísimo. Ojala esto le sirva a otras personas que tengan este mismo proyecto o similar.

Ahora que me animé con este script gracias a sus aportes, me gustaría complementarlo con algo que realice una sincronización con la copia de seguridad de tal forma que, cada vez que realice la tarea, copie solo aquellos archivos que han tenido modificaciones. Para evitarme de copiar todo nuevamente en varias horas. Para eso se me ocurre hacer una comparación entre fechas de modificación entre un archivo y el otro para solo copiar el mas nuevo si es que existe alguna diferencia, Así espero ahorrarme alguna horas y recursos del sistema. Creo que Autoit tiene buenas herramientas de fechas a las que se le puede hechar mano para realizar lo que comento.

Cuando tenga algo avanzado se los muestro para compartir el código.

Saludos y muchas gracias a todos nuevamente.

Re: Backup Ficheros .AU3

Publicado: 11 Feb 2014, 02:30
por kotoqu
Bueno amigos, lo prometido es deuda.

Modifiqué un poco el script anterior, que ya era muy bueno, y lo dejé de tal forma que cada vez que haga una copia de seguridad sólo copie los archivos que han sufrido modificaciones y los archivos nuevos. Así nos evitamos copiar montones de archivos que no han cambiado para nada y se hace muchísimo mas rápido el trámite de BackUp.

Debo hacer presente que gran parte de la magia está en la función _FileListToArrayRec que viene en el include "File.au3" pero esta función no esta en las versiones antiguas de Autoit, así que primero hay que asegurarse de tener la última versión estable. Esto último ha sido aporte del amigo @PDF, así como de otros generoso que han aportado a este pequeño código.

Acá pego el código para que lo comenten, lo corrijan y lo mejoren.
Saludos.

Código: Seleccionar todo

#include <File.au3>
#include <FileConstants.au3>


Global $SourceFolder = "C:\Fichero A\" ; Carpeta donde se hallan tus scripts con "\"

Global $DestinationFolder = "F:\Fichero B" ; Carpeta de respaldo de tus scripts ¡¡¡¡¡¡¡ Importante no ponerle "\" !!!!!!

; Primeramente enumeramos los archivos excluyendo los ejecutables ( aquí puede modificar el 1er comodín A tu gusto dependiendo de lo que necesites copiar

Global $Array = _FileListToArrayRec($SourceFolder, "*|*.exe", 1, 1, 1, 2)

If Not IsArray($Array) Or Not $Array[0] Then Exit MsgBox(4096, 'No se encontraron archivos', 'No se encontraron archivos en ' & $SourceFolder)


ProgressOn("Copia de seguridad", "Copiando archivos", "Inicializando...", Default, Default, 16)

For $n = 1 To $Array[0]

; Con el FileGetTime obtenemos la fecha de la última modificación del archivo "A" en formato "20140210224355", esto es año, mes, día minutos, segundos.
$iFileGetTime1 = FileGetTime($Array[$n], $FT_MODIFIED, 1)


$File_A = StringReplace ($Array[$n], $SourceFolder,"") 	; Extraemos el nombre (corto sin Path) de fichero "A" a copiar ej. "Fichero.txt".

$iFileGetTime2 = FileGetTime($DestinationFolder&"\"&$File_A, $FT_MODIFIED, 1) ; Consultamos la fecha de modificación de fichero "B". Si no existe me dará 0.

If $iFileGetTime1 <> $iFileGetTime2 Then	; Si existe alguna diferencia entre la fecha de modificación entre el archivo "A" y el "B" copia "Fichero A" en "B", de lo contrario salta al otro fichero "A".

$sPercent=(($n*100)/$Array[0])
ProgressSet($sPercent,"Copiando "&$n&" de "&$Array[0])
FileCopy($Array[$n], StringReplace($Array[$n], $SourceFolder, $DestinationFolder&"\"), 9)



EndIf

Next

ProgressSet($sPercent,"Finalizando")
Sleep (3000)
ProgressOff()