el codigo que ven abajo es de un programa que cuando insertas una usb copia en una carpeta en mis docs llamada respaldos usb los archivos que tenemos en la usb , en post`s anteriores esta solo que ahora esta mas puldo
tiene las sgte opciones
1 copiar archivos : copia todos los archivos de la usb a excepcion de unos cuantos, por cosas de seguridad alli estan marcados
2 copiar archivos recientes : copia solo los archivos agregados desde la ultima copia en el pen drive de manera que no redunda en archivos respaldados dentro dela usb (usando filegettime, trato de copiar ls archivos creados, acceados y modificados )** es aqui donde esta el pero del asunto
este code esta 99 % funcional pero tengo dos problemas
1 en la funcion core que fue la que yo hice, al copiar los archivos recientes no me copia las carpetas recientes, es decir si tengo 10 archivos nuevos y 5 estan en una carpeta me copia l os 10 peor sin la carpeta nueva asi esta haya sido creada el mismo dia de los archivos nuevos
2 la funcion coRe la hice yo el resto del code es de gna08 con uno que otro toquesito mio (nada profesional aclarosolo 1 o 2 lineas) asi que creo que este codigo (func core) esta un poco sucio y redundante podrian por favor revisarla y decirme que sobra o falta en las variables y demas
acabo de detectar que el pc no me esta dejando sacar el p endrive me dice que esta en uso seral func core ?
desgraciada funciona core , pero oclaro es mi primera funcion
este es el code final solo falta agregar el autoplay handlers que esta en otro post para la ejecucion al insertar en la "Ventana que desea que windows haga"
mil gracias por la ayuda
pd
basic me dice que puede ser que no le asigne una variable en la func core pero la verdad eso fue como si me hablara de fisica cuantica pro que creo que las tengo todas asi que no se donde ponerla ni que poner, tbn me habia dicho que usar algunas opcioens del winrar pero por aca en colombia ese programa solo lo usan los que descargamos mucho, ademas creo y en mi inocente ignorancia que lo que le falta es poco casi nada
Código: Seleccionar todo
#NoTrayIcon
#Include <File.au3>
#Include <Array.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <date.au3>
#cs
FileInstall("C:\logo.jpg", @ScriptDir & "\logo.jpg")
SplashImageOn("", "logo.jpg", 250, 242, -1, -1, 1)
Sleep(3000)
SplashOff()
#ce
Global $Rees = 1 ;Variable para sobreescribir archivos (1 por defecto para sobreescritura, 0 para lo contrario)
Dim $aDrives = _DriveGet()
HotKeySet("{F8}", "_Exit") ;Recomiendo que utilices alguna tecla de funcion como F8 por ejemplo XD.
HotKeySet("+!m", "_Sp") ;Y aqui tambien. Las convinaciones pueden ser "+!m" es Shift + Alt + M.
;Como te paresca mas apropiado XD
While 1
$s = _DriveGet()
If $s = True Then _Ans()
Sleep(250)
WEnd
Func _Sp()
If Not WinExists("Respaldar archivos") Then ;Detecta si no existe la misma ventana abierta, asi no genera errores
If _DriveGet() = True Then
_Ans()
Else
MsgBox(0, "No se detecta unidad removible!", "No se detecta unidad removible!")
EndIf
EndIf
EndFunc
Func _Exit()
Exit
EndFunc
Func _Ans()
$m = GUICreate("Respaldar archivos", 281, 97, 419, 263)
$bc = GUICtrlCreateButton("Copiar Archivos", 25, 64, 85, 25)
$bcr = GUICtrlCreateButton("Copiar Archivos Recientes", 126, 64, 145, 25)
GUICtrlCreateLabel("Extraible Detectado", 16, 8, 233, 28)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
$rew = GUICtrlCreateCheckbox("Sobreescribir archivos existentes en Destino", 19, 40, 225, 17) ;Si esta seleccionado puede tardar mas tiempo en completar la operacion
GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlSetTip(-1, "Si esta seleccionado puede tardar mas tiempo en completar la operacion!")
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
GUIDelete()
While 3
Sleep(1000)
If _DriveGet() <> True Then ExitLoop
WEnd
ExitLoop
Case $bc
If GUICtrlRead($rew) = $GUI_CHECKED Then
Global $Rees = 1
Else
Global $Rees = 0
EndIf
GUIDelete()
$Co = CoAr()
If $Co = False Then
MsgBox(0, "Gracias gna08", "No se encontraron mas archivos")
ShellExecute(_DriveGet())
While 3
Sleep(1000)
If _DriveGet() <> True Then ExitLoop
WEnd
ExitLoop
EndIf
While 3
Sleep(1000)
If _DriveGet() <> True Then ExitLoop
WEnd
ExitLoop
exit ;////////////////////////////////////////////////////////////////////////////////////////
Case $bcr
If GUICtrlRead($rew) = $GUI_CHECKED Then
Global $Rees = 1
Else
Global $Rees = 0
EndIf
GUIDelete()
$Co = Core()
If $Co = False Then
MsgBox(0, "Gracias gna08", "No se encontraron mas archivos")
ShellExecute(_DriveGet())
While 3
Sleep(1000)
If _DriveGet() <> True Then ExitLoop
WEnd
ExitLoop
EndIf
While 3
Sleep(1000)
If _DriveGet() <> True Then ExitLoop
WEnd
ExitLoop
EndSwitch
WEnd
Exit ;/////////////////////////////////////////////////////////////
EndFunc
Func CoAr()
Local $iSearch, $iFile, $drv, $drv
DirCreate(@MyDocumentsDir & "\" & "Respaldos usb" & "\" & @MDAY & @MON & @YEAR)
$drv = _DriveGet()
$iSearch = FileFindFirstFile($drv & "\*.*")
If $iSearch = -1 Then Return False
$FileList=_FileListToArray($drv);Cantidad de archivos/carpetas en el extraible
$calculateperc = Round(Round(100 / $FileList[0], 1)) ;Redondeamos para evitar decimales
ProgressOn("Copiando", "Porcentaje")
$calculateperc2 = $calculateperc
While 1
$iFile = FileFindNextFile($iSearch)
If @error Then ExitLoop
;Estos son los archivos a evitar copiar XD
If StringInStr($iFile, ".ini") <> 0 Then ContinueLoop 1 ;Ini (este es un ejemplo para archivo, con extension Ini)
If StringInStr($iFile, ".inf") <> 0 Then ContinueLoop 1 ;Inf (Idem)
If $iFile = "restore" Then ContinueLoop 1 ;carpeta (este es un ejemplo para una carpeta con el nobre k desees)
If $iFile = "config" Then ContinueLoop 1 ;carpeta (Idem)
If $iFile = "system" Then ContinueLoop 1 ;carpeta (Idem)
;Puedes agregar mas si deseas k se eviten otras, copiando ambos ejemplos ejemplos XD
;Aca define si es carpeta o archivo
If StringInStr(FileGetAttrib($drv & "\" & $iFile), "D") Then
$Atrib = "(Carpeta)"
Else
$Atrib = "(Archivo)"
EndIf
;Aca se setea el progreso, con el archivo k esta copiando
If $calculateperc > 100 Then
ProgressSet(99, 99 & ' % - Copiando: "' & $iFile & '" ' & $Atrib)
Else
ProgressSet( $calculateperc, $calculateperc & ' % - Copiando: "' & $iFile & '" '& $Atrib)
EndIf
;Aqui copia los archivos
If StringInStr(FileGetAttrib($drv & "\" & $iFile), "D") Then
DirCopy($drv & "\" & $iFile, @MyDocumentsDir & "\" & "Respaldos usb" & "\" & @MDAY & @MON & @YEAR & "\" & $iFile, $Rees)
Else
FileCopy($drv & "\" & $iFile, @MyDocumentsDir & "\" & "Respaldos usb" & "\" & @MDAY & @MON & @YEAR & "\" & $iFile, $Rees)
EndIf
$calculateperc = $calculateperc + $calculateperc2 ;Valor para poder aumentar la barra de progreso
WEnd
FileClose($iSearch)
ProgressSet(100 , "Listo", "Completo")
sleep(500)
ProgressOff()
EndFunc
;/*/*//*/*////////////////////***********************//////////*/*/*/*/*/*/*/*/*/*/*
func CoRe()
local $usb,$Search,$FileR,$usb,$fileref,$datediff,$usbfiles,$1Time
DirCreate(@MyDocumentsDir & "\" & "Respaldos usb" & "\" & @MDAY & @MON & @YEAR)
$usb = _DriveGet()
$1Time = FileGetTime("C:\error.log",1)
$fileref = $1Time[2] & "/" & $1Time[1] & "/" & $1Time[0]
$search = FileFindFirstFile($usb & "\*.*")
$FileList=_FileListToArray($usb);Cantidad de archivos/carpetas en el extraible
$calculateperc = Round(Round(100 / $FileList[0], 1)) ;Redondeamos para evitar decimales
ProgressOn("Copiando", "Porcentaje")
$calculateperc2 = $calculateperc
While 1
$FileR = FileFindNextFile($Search)
If @error Then ExitLoop
If StringInStr($FileR, ".ini") <> 0 Then ContinueLoop 1
If StringInStr($FileR, ".inf") <> 0 Then ContinueLoop 1
If $FileR = "restore" Then ContinueLoop 1
If $FileR = "config" Then ContinueLoop 1
If $FileR = "system" Then ContinueLoop 1
If StringInStr(FileGetAttrib($usb & "\" & $FileR),"R,A,N,D,O,C,") Then
$Atrib = "(Carpeta)"
Else
$Atrib = "(Archivo)"
EndIf
If $calculateperc > 100 Then
ProgressSet(99, 99 & ' % - Copiando: "' & $FileR & '" ' & $Atrib)
Else
ProgressSet( $calculateperc, $calculateperc & ' % - Copiando: "' & $FileR & '" '& $Atrib)
If @error Then ExitLoop
$attrib = FileGetAttrib($usb & "\" & $FileR)
If Not StringInStr($attrib , "R,A,N,D,O,C,") Then
$mod = FileGetTime($usb & $FileR, 0, 0)
$usbfiles= $mod[2] & "/" & $mod[1] & "/" & $mod[0]
$datediff= $usbfiles-$fileRef
;If $datediff > 1 Then ; LINEA ORIGINAL LADE ABAJO LA PUSE PA VERSI ME COPIA LOS FOLDERS
If $datediff > 1 and StringInStr(FileGetAttrib($usb & "\" & $FileR), "R,A,N,D,O,C")Then ;/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
DirCopy($usb& "\" & $FileR, @MyDocumentsDir & "\" & "Respaldos usb" & "\" & @MDAY & @MON & @YEAR & "\" )
Else
FileCopy($usb & "\" & $FileR, @MyDocumentsDir & "\" & "Respaldos usb" & "\" & @MDAY & @MON & @YEAR & "\" )
EndIf ; este lo use de ejemplo y me copia todos los files
;recientes pero no la estructura de los folders asi eston sean recientes
$calculateperc = $calculateperc + $calculateperc2
EndIf
EndIf
WEnd
FileClose($search)
ProgressSet(100 , "Listo", "Completo")
sleep(500)
ProgressOff()
EndFunc
Func _DriveGet()
Local $aDrive = DriveGetDrive("REMOVABLE")
If @error Then Return False
Local $iCount = 0, $aRetDrive[1], $i
For $i = 1 To $aDrive[0]
If ($aDrive[$i] = "a:") Or (DriveStatus($aDrive[$i]) <> "READY") Then ContinueLoop
$aRetDrive[0] += 1
ReDim $aRetDrive[$aRetDrive[0] + 1]
$aRetDrive[$aRetDrive[0]] = StringUpper($aDrive[$i])
Return StringUpper($aDrive[$i])
$iCount += 1
Next
If $iCount <> "0" Then Return True
Return $aRetDrive
EndFunc