Página 1 de 1

Copiar archivo desde usb a carpeta

Publicado: 02 Jun 2014, 22:17
por mcr_bkn
Amigos, me estoy iniciando en autoit y estoy haciendo unas pruebas, lo que quiero hacer es copiar un archivo en especifico desde un pendrive a una carpeta determinada, el problema lo tengo al buscar en carpetas o subcarpetas a ver si me pueden ayudar, intente de varias formas y no logro hacerlo. La idea general es buscar imagenes .jpg en el pendrive, carpetas y subcarpetas todas las fotos y copiarlas a una carpeta determinada.

Código: Seleccionar todo

#include <File.au3>
#include <Array.au3>
#include <directorio.au3>

Pregunta()

func Pregunta()

local $Respuesta = MsgBox(3, "Prueba", "Hay pendrive?", 0)



	if $Respuesta = 6 Then

			$var = DriveGetDrive( "REMOVABLE" )

			If Not @error Then
				MsgBox(0, "Hay pendrive?", "Este es: " & $var[0], 0)

				For $i = 1 to $var[0]

					$FileList = _FileListToArray($var[$i], "*.jpg")
					$Carpetas=DirContents($var[$i],"dir")
						If @error Then Exit
							For $A = 1 To $FileList[0]
							;ShellExecute($Folder & $FileList[$A])
							FileCopy($var[$i] & $FileList[$A], @DesktopDir &"\Prueba2\*.*")

							Next

						   For $B = 1 to $Carpetas[0]

									$FileListCarp = _FileListToArray($var[$i] & $Carpetas[$B] , "*.jpg")
									Sleep(300)
									;_ArrayDisplay($FileListCarp)
									FileCopy($var[$i] & $Carpetas[$B] & $FileListCarp, @DesktopDir &"\Prueba2\*.*")
								Sleep(300)
							Next

				Next

			else
				MsgBox(0, "Hay pendrive?", "No hay pendrive", 0)
				Sleep(10000)

			EndIf

		Pregunta()

	ElseIf $Respuesta = 7 Then
		MsgBox(0, "Entro IF", "Apreto No", 0)

	else
		MsgBox(0, "Entro IF", "Apreto Cancelado", 0)
	EndIf

EndFunc
el include directorio lo saque desde un post que hizo tauro http://www.emesn.com/autoitforum/viewto ... f=4&t=4112

Espero puedan sacarme de la duda.

Re: Copiar archivo desde usb a carpeta

Publicado: 02 Jun 2014, 22:44
por Dany3j
Que versión de AutoIt tienes? podrías usar _FileListToArrayRec

Re: Copiar archivo desde usb a carpeta

Publicado: 02 Jun 2014, 22:58
por yasmany
Puede que esto te sirva: haciendo una busqueda recursiva en la unidad que especifiques, el codigo está comentado.

Código: Seleccionar todo

DirCreate(@DesktopDir & "\Carpetadecopiado") ; crea la carpeta en donde se va a copiar las imagenes
Global $unidad = "I:"
Global $comprobandoBusqueda = ".jpg"
Global $carpetaDestino = @DesktopDir & "\Carpetadecopiado" ; especifica la direccion de la carpeta en el escritorio

ListFiles_Recursive($unidad)
Func ListFiles_Recursive($sSourceFolder)
	Local $sFile
	If StringRight($sSourceFolder, 1) <> "\" Then $sSourceFolder &= "\" ; identifica si la direccion termina en slash "\" caso contrario le aumenta "\"

	Local $hSearch = FileFindFirstFile($sSourceFolder & "*.*")
	If $hSearch = -1 Then Return

	While 1
		$sFile = FileFindNextFile($hSearch)
		If @error Then ExitLoop
		If @extended Then ; si es una carpeta continua buscando
			ListFiles_Recursive($sSourceFolder & $sFile)
		Else; si no es carpeta presenta el archivo encontrado
			If StringRight($sSourceFolder & $sFile, 4) = $comprobandoBusqueda Then; comprueba si los archivos que va encontrando terminan en jpg
				ConsoleWrite("Found: " & $sSourceFolder & $sFile & @CRLF); impr
				FileCopy($sSourceFolder & $sFile, $carpetaDestino)
			EndIf
		EndIf
	WEnd
	FileClose($hSearch)
EndFunc   ;==>ListFiles_Recursive

Re: Copiar archivo desde usb a carpeta

Publicado: 03 Jun 2014, 04:03
por PDF
No se si este equivocado, (en el codigo de arriba), al realizar una búsqueda recursiva y llamar a la función dentro de la misma función, creo que la búsqueda no será tan efectiva, ya que al hacer esto, se omiten las carpetas restantes... de igual manera creo que es mejor, si, al realizar la búsqueda y al encontrar una subcarpeta, almacenarla en una variable como muestra este ejemplo ;)

Código: Seleccionar todo

$Drive = "E:\" ; Unidad en cual deseas buscar
$Dest = @MyDocumentsDir & "\Imagenes"
$type = ".jpg"
_BackupImages($Drive, $Dest, $type)
ShellExecute($Dest)
Func _BackupImages($sPath, $sDest, $sExt) ; Directorio de busqueda, Destino y Extension (*.jpg)
	Local $sPath_TotalSize
	$sPath = StringRegExpReplace($sPath, "[\\/]+\z", "")
	$sDest = StringRegExpReplace($sDest, "[\\/]+\z", "")
	DriveGetLabel($sPath)
	If @error Then
		$sPath_TotalSize = DirGetSize($sPath)
	Else
		$sPath_TotalSize = (DriveSpaceTotal($sPath) - DriveSpaceFree($sPath)) * 1048576
	EndIf
	If Not FileExists($sPath) Then Return 0
	Local $sPath_CurrSize = 0
	$sPath &= "\|"
	Local $sPath_OrigLen = StringLen($sPath) - 1
	ProgressOn("Progreso de copia de archivos " & $sExt, "Buscando y copiando archivos de '" & $sPath & "'", "0%")
	While $sPath
		$sPath_CurrLen = StringInStr($sPath, "|") - 1
		$sPath_Curr = StringLeft($sPath, $sPath_CurrLen)
		$Search = FileFindFirstFile($sPath_Curr & "*.*")
		If @error Then
			$sPath = StringTrimLeft($sPath, $sPath_CurrLen + 1)
			ContinueLoop
		EndIf
		While 1
			$Search_FileRes = FileFindNextFile($Search)
			If @error Then ExitLoop ;No hay mas archivos... Saliendo...
			If @extended Then
				; El archivo actual es una carpeta, Regresar al While...
				$sPath &= $sPath_Curr & $Search_FileRes & "\|"
				ContinueLoop
			EndIf
			$sPath_CurrSize += FileGetSize($sPath_Curr & $Search_FileRes)

			If _FileGetExt($sPath_Curr & $Search_FileRes) = $sExt Then
				ProgressSet(($sPath_CurrSize * 100) / $sPath_TotalSize, Ceiling(($sPath_CurrSize * 100) / $sPath_TotalSize) & "%")
				;If Not FileExists($sDest) Then DirCreate($sDest& "\")
				FileCopy($sPath_Curr & $Search_FileRes, $sDest & "\" ,8)

			EndIf
		WEnd
		FileClose($Search)
		$sPath = StringTrimLeft($sPath, $sPath_CurrLen + 1)
	WEnd
	ProgressOff()
EndFunc   ;==>_BackupImages

; Función:    _FileGetExt()
; Descripción: Retorna la extensión del archivo indicado
; Autor:     PDF

Func _FileGetExt($sFilepath)
	Local $sRet, $sPos
	; If Not FileExists($sFilepath) Then Return SetError(1) ;File Don't Exist
	If (DirGetSize($sFilepath, 2) <> -1) Then Return SetError(2, 1) ; Is a Folder
	$sPos = StringInStr($sFilepath, ".", -1)
	If @error Then Return "" ; File don't have extension
	$sRet = StringTrimLeft($sFilepath, $sPos - 1)
	If Not $sRet Then Return SetError(3) ;File name end to dot
	Return $sRet
EndFunc   ;==>_FileGetExt
Puedes estudiarlo y adaptarlo para que copie varios archivos(varias extensiones *.png|*.jpg..)
Saludos

Re: Copiar archivo desde usb a carpeta

Publicado: 03 Jun 2014, 04:24
por mcr_bkn
Gracias amigo, mañana lo reviso con mas tranquilidad...

Saludos!!!!

Re: Copiar archivo desde usb a carpeta

Publicado: 04 Jun 2014, 23:03
por mcr_bkn
AMigo PDF no me funciono, estoy tratando de buscar donde esta el error pero no lo encuentro, lo probaste?

Re: Copiar archivo desde usb a carpeta

Publicado: 05 Jun 2014, 01:39
por PDF
mcr_bkn escribió:AMigo PDF no me funciono, estoy tratando de buscar donde esta el error pero no lo encuentro, lo probaste?
Disculpa, no lo había probado, el error estaba en esta línea :smt021

Código: Seleccionar todo

     $sPath = StringRegExpReplace($sPath, "[\\/]+\z", "")
     $sDest = StringRegExpReplace($sPath, "[\\/]+\z", "")
Al parecer lo que hacía era copiar todo a la unidad raìz...
Pero ya lo corregi, y a mi al menos me funciona bien..
Saludos!

Re: Copiar archivo desde usb a carpeta

Publicado: 05 Jun 2014, 18:06
por mcr_bkn
PDF escribió:
mcr_bkn escribió:AMigo PDF no me funciono, estoy tratando de buscar donde esta el error pero no lo encuentro, lo probaste?
Disculpa, no lo había probado, el error estaba en esta línea :smt021

Código: Seleccionar todo

     $sPath = StringRegExpReplace($sPath, "[\\/]+\z", "")
     $sDest = StringRegExpReplace($sPath, "[\\/]+\z", "")
Al parecer lo que hacía era copiar todo a la unidad raìz...
Pero ya lo corregi, y a mi al menos me funciona bien..
Saludos!
Ahi esta perfecto muchas gracias, este es el cambio:

Código: Seleccionar todo

     $sPath = StringRegExpReplace($sPath, "[\\/]+\z", "")
     $sDest = StringRegExpReplace($sDest, "[\\/]+\z", "") ;este es el cambio
Voy a estudiar el codigo y tengo algunas dudas que te las voy a hacer amigo.


Saludos!!!

Re: Copiar archivo desde usb a carpeta

Publicado: 05 Jun 2014, 19:28
por Chefito
PDF escribió:No se si este equivocado, (en el codigo de arriba), al realizar una búsqueda recursiva y llamar a la función dentro de la misma función, creo que la búsqueda no será tan efectiva, ya que al hacer esto, se omiten las carpetas restantes... de igual manera creo que es mejor, si, al realizar la búsqueda y al encontrar una subcarpeta, almacenarla en una variable como muestra este ejemplo ;)
Pues sí, te equivocas :smt003 . Si el algoritmo de búsqueda está bien definido, no tiene porque fallar ni dejarse ninguna carpeta.
En que no es tan efectiva, creo que también te equivocas :smt002 . Los algoritmos recursivos se vienen haciendo desde hace muchiiiiiiisiiiiiiimos años. Lo que pasa que la recursión siempre ha sido más difícil de comprender que la iteración. En la universidad se estudian algoritmos eficaces de recursión, y su transformación a iteración, y lo contrario.
Aunque estos algoritmos son más difíciles de comprender, suelen ser más cortos de realizar, y muchas veces más fáciles, que el equivalente en iterativo. Consumen más memoria, pero hoy día no hay problema con ese aspecto :smt002 .
En su día, hubo un post que estudiaba la eficacia de scripts de búsqueda de ficheros. Yo me decanté por hacerlo de forma recursiva, y en las pruebas de tiempo, salía ganando por bastante (eran más rápidos). La pena es que ese post desapareció, pero yo volví a poner mis códigos y funciones en otro post.
Mirar este post que os dejo, y los posts que se nombran en ellos; sobretodo el primero que se nombra.

http://www.emesn.com/autoitforum/viewto ... ivo#p14942

Solo hay que buscar en el buscador del foro, y veréis que muchos problemas que os encontráis ya están más que hablados y estudiados :smt024 :smt003 :smt023

Saludos.

Re: Copiar archivo desde usb a carpeta

Publicado: 05 Jun 2014, 20:54
por yasmany
Ya se me hacía raro que el código que brindé esté mal :smt017 , aunque le busque donde estaría mal e hice pruebas antes de publicarlo todo funciona bien.
Bueno soy aprendiz pero si en algo ayudo y estoy mal, muy gustoso aceptaría que me hicieran conocer mi falla, estoy en un proceso de aprendizaje y aplicación, TENGO MUUUUCHO QUE APRENDER :smt003 .

Saludos :smt024

Re: Copiar archivo desde usb a carpeta

Publicado: 06 Jun 2014, 04:16
por PDF
Claro, por eso deje esa duda (para que me lo aclararan), yo también soy un aprendiz, y también trato de ayudar en lo que pueda y esto de la recursión es un tema muy interesante, he utilizado este tipo de código en un buscador de enlaces a programas de cierta página muy conocida y me ha funcionado muy bien...
Chefito escribió:Los algoritmos recursivos se vienen
haciendo desde hace muchiiiiiiisiiiiiiimos años. Lo que pasa que la recursión siempre ha sido más difícil de comprender que la iteración
Tienes razón son difíciles de comprender, ya que al intentar seguir el proceso "mentalmente" crea esa duda pero ya veo que estoy equivocado..

No quize dar la sensación de desmeritar el codigo de yasmany (aunque haya parecido que si)(tampoco dije que estuviera mal)

He estudiado bastante tus códigos Chefito, sobre todo el Buscador de textos (y veo que tu utilizas ese metodo), hasta he tratado de hacer mi propia version... claro con tu permiso :smt003
Chefito escribió:En su día, hubo un post que estudiaba la eficacia de scripts de búsqueda de ficheros.. Yo me decanté por hacerlo de forma recursiva, y en las pruebas de tiempo, salía ganando por bastante (eran más rápidos). La pena es que ese post desapareció, pero yo volví a poner mis códigos y funciones en otro post.
Que pena que se haya perdido este post, seria bueno crear uno nuevo en donde vayamos proponiendo ideas...

Saludos..

Re: Copiar archivo desde usb a carpeta

Publicado: 06 Jun 2014, 14:24
por Chefito
PDF escribió:He estudiado bastante tus códigos Chefito, sobre todo el Buscador de textos (y veo que tu utilizas ese metodo), hasta he tratado de hacer mi propia version... claro con tu permiso
Me gusta que os guste mis códigos y los pocos script completos que llegé a realizar :smt001 . Los scripts y códigos que cuelgo son totalmente libres...no me importa que los utilicéis para lo que queráis. Para eso están ahí :smt003 . Eso sí, si lo que utilizáis es una gran cantidad de código mio en algún programa vuestro, se agradecería una mención hacía mí en dicho programa :smt024 :smt003 .
yasmany escribió:Que pena que se haya perdido este post, seria bueno crear uno nuevo en donde vayamos proponiendo ideas...
Pufffffffff, era un post muy largo, con muchos participantes. Se colgaron códigos iterativos y recursivos. Se hicieron estudios de tiempo que nos costaron algunas horas :smt024 . Yo en su día ya lo hice. Os toca a los más nuevos :smt023 . Por supuesto, si veo que necesitáis ayuda y se hacerlo, os intentaría ayudar :smt002 .

Saludos.

Re: Copiar archivo desde usb a carpeta

Publicado: 11 Jun 2014, 18:16
por mcr_bkn
Hola amigos del foro me alegro que el tema que toque haya servido de debate ya que uno asi aprende mas, ahora como recien estoy comenzando a programar tengo algunas dudas respecto al codigo del PDF a ver si me las pueden aclarar y espero algun día pueda crear mis propias funciones y script.

Código: Seleccionar todo

$sPath = StringRegExpReplace($sPath, "[\\/]+\z", "")
En esta instancia lo que hace es eliminar el back slach (\) pero luego lo agrega:

Código: Seleccionar todo

$sPath &= "\|"
Por que es esto?


Ahora otra cosa, el while $sPath este busca todos los archivos de la carpeta de origen?? y como busca las subcarpetas a ver si me pueden explicar un poco esto por favor. El while 1 verifica si los archivos encontrados son .jpg???

bueno esas son mis dudas, reduje el codigo para que solo quede el codigo de busqueda y no aparesca la barra de avance.

Código: Seleccionar todo


$Drive=@DesktopDir&"\Origen" ; Unidad en cual deseas buscar
$Dest=@DesktopDir&"\Prueba2"
$type = ".jpg"
_BackupImages($Drive, $Dest, $type)
Func _BackupImages($sPath, $sDest, $sExt) ; Directorio de busqueda, Destino y Extension (*.jpg)
   Local $sPath_TotalSize
   $sPath = StringRegExpReplace($sPath, "[\\/]+\z", "") ; Cambia D:\ a D:
   $sDest = StringRegExpReplace($sDest, "[\\/]+\z", "") ;  ¿Qué función cumple?
   $sPath &= "\|" ; El directorio sPath queda D:\| y para que se agrega | ??
   While $sPath ; While D:\| Que hace este While?
   	  $sPath_CurrLen = StringInStr($sPath, "|") - 1 ; Devuelve el valor de caracteres de la carpeta

	  $sPath_Curr = StringLeft($sPath, $sPath_CurrLen) ;Devuelve el nombre de la carpeta
	  $Search = FileFindFirstFile($sPath_Curr & "*.*") ;Handle asignado a la busqueda
      If @error Then
         $sPath = StringTrimLeft($sPath, $sPath_CurrLen + 1)
		ContinueLoop
      EndIf
      While 1
         $Search_FileRes = FileFindNextFile($Search) ;Busca todos los archivos y carpetas
         If @error Then ExitLoop ;No hay mas archivos... Saliendo...
         If @extended Then
            ContinueLoop
         EndIf

         If _FileGetExt($sPath_Curr & $Search_FileRes) = $sExt Then ;Si el archivo encontrado es .jpg entonces

			FileCopy($sPath_Curr & $Search_FileRes, $sDest & "\" ,8)

         EndIf
      WEnd
      FileClose($Search)
      $sPath = StringTrimLeft($sPath, $sPath_CurrLen + 1)
   WEnd
EndFunc   ;==>_BackupImages

; Función:    _FileGetExt()
; Descripción: Retorna la extensión del archivo indicado
; Autor:     PDF

Func _FileGetExt($sFilepath)
   Local $sRet, $sPos
   ; If Not FileExists($sFilepath) Then Return SetError(1) ;File Don't Exist
  ;Msgbox (0, "Prueba", "Archivo: " & $sFilepath)
  If (DirGetSize($sFilepath, 2) <> -1) Then Return SetError(2, 1) ; Is a Folder
   $sPos = StringInStr($sFilepath, ".", -1)
   If @error Then Return "" ; El archivo no tiene extension
   $sRet = StringTrimLeft($sFilepath, $sPos - 1) ;devuelve la extension
   ;Msgbox (0, "Prueba", "Archivo: " & $sRet)
   If Not $sRet Then Return SetError(3) ;File name end to dot
   Return $sRet
EndFunc   ;==>_FileGetExt

Espero puedan ayudarme y aclarar mis dudas, gracias de ante mano.

Saludos!

Re: Copiar archivo desde usb a carpeta

Publicado: 13 Jun 2014, 03:48
por PDF
Hola mcr_bkn, trataré de aclarar las dudas con respecto al codigo que te presenté...
mcr_bkn escribió:

Código: Seleccionar todo

$sPath = StringRegExpReplace($sPath, "[\\/]+\z", "")
En esta instancia lo que hace es eliminar el back slach (\) pero luego lo agrega:

Código: Seleccionar todo

$sPath &= "\|"
Por que es esto?
Exactamente, lo que hace es eliminar el backslach, pero solo si el directorio termina en este carácter, es porque esta función fue hecha para ser utilizada con otros directorios, no solamente con la unidad raíz, por ejemplo llamas a la función de la siguiente manera:

Código: Seleccionar todo

; Copiar todos las imágenes de "c:\Imagenes\" a "E:\"
_BackupImages("C:\Imagenes\","E:\",".jpg")
Esta linea hará que $sPath quede así "C:\Imagenes" y luego le volverá a añadir la barra invertida [y un separador "|" (explicado mas adelante)], esto es necesario para evitar posibles errores en el nombre de archivos, por ejemplo "C:\ImagenesImagen.jpg" ó "C:\Imagenes\\Imagen.jpg"
mcr_bkn escribió: Ahora otra cosa, el while $sPath este busca todos los archivos de la carpeta de origen?? y como busca las subcarpetas a ver si me pueden explicar un poco esto por favor. El while 1 verifica si los archivos encontrados son .jpg???
Lo que el codigo en si hace es, primero almacenar en una variable $sPath el directorio inicial terminado en "\|", la barra vertical lo utilizaremos como un separador de todos los subdirectorios que iremos encontrando en el directorio inicial y añadiendo a esta variable.. En el ejemplo anterior $sPath="C:\Imagenes\|"

Lo que el primer bucle hace es verificar si existen todavía directorios por buscar ($sPath es diferente de ""), si no es así sale de la función, si es así, continúa.
Siguiendo con el ejemplo While "C:\Imagenes\|"

Creo que eliminaste una parte muy importante del codigo, que es esta linea:

Código: Seleccionar todo

If @extended Then
            ; El archivo actual es una
carpeta, Regresar al While...
            $sPath &= $sPath_Curr &
$Search_FileRes & "\|" ; esto agrega subcarpetas 
            ContinueLoop
         EndIf
Aquí, si el archivo encontrado es una carpeta, agregamos a la variable $sPath la ruta completa a esa subcarpeta siempre separados por "|"
Ej. Existe una subcarpeta llamada "Junio" entonces $sPath="C:\Imagenes\|C:\Imagenes\Junio\|"

Código: Seleccionar todo

$sPath = StringTrimLeft($sPath,$sPath_CurrLen + 1)
En esta línea se elimina la carpeta en la cual se busco por ultima vez ..
Ej. Ahora $sPath="C:\Imagenes\Junio\|", y la siguiente carpeta en la cual se va a buscar es esa..

Esto hace que cuando ya no hayan subcarpetas salga del bucle principal, y por ende de la función.

De todas maneras te dejo el codigo comentado con las aclaraciones...

Código: Seleccionar todo

$Drive=@DesktopDir&"\Origen" ; Unidad en cual deseas buscar
$Dest=@DesktopDir&"\Prueba2"
$type = ".jpg"
_BackupImages($Drive, $Dest, $type)
Func _BackupImages($sPath, $sDest, $sExt) ; Directorio de busqueda, Destino y Extension (*.jpg)
   Local $sPath_TotalSize
   $sPath = StringRegExpReplace($sPath, "[\\/]+\z", "") ; Cambia D:\ a D:
   $sDest = StringRegExpReplace($sDest, "[\\/]+\z", "") ;  Evita que la ruta de destino termine en "\"
      While $sPath ; Comprueba si aun existen carpetas en la cual se quiere buscar, sino sale..
     $sPath_CurrLen = StringInStr($sPath, "|") - 1 ; Devuelve la posición del primer separador encontrado 
; Esto para utilizarlo como longitud de la ruta de la carpeta a buscar
  $sPath_Curr = StringLeft($sPath, $sPath_CurrLen) ;Devuelve el nombre de la carpeta actual, para el principio sera D:\
  $Search = FileFindFirstFile($sPath_Curr & "*.*") ;Handle asignado a la busqueda
      If @error Then
         $sPath = StringTrimLeft($sPath, $sPath_CurrLen + 1) ; Error en la búsqueda en esta carpeta, buscando en la siguiente...
ContinueLoop
      EndIf
      While 1 ; ** Búsqueda de archivos y subcarpetas
         $Search_FileRes = FileFindNextFile($Search) ; Almacena en la variable $Search_FileRes el nombre del archivo encontrado..
         If @error Then ExitLoop ;No hay mas archivos... Saliendo del bucle While 1 de búsqueda... 
         If @extended Then ; El archivo encontardo es una carpeta
           ; Esta es la parte en donde agregamos el directorio completo de la subcarpeta a la variable $sPath separados por "|"
            $sPath &= $sPath_Curr &
$Search_FileRes & "\|" ; esto agrega subcarpetas 
            ContinueLoop ; Continuamos con el siguiente archivo encontrado, esto retorna a la línea indicada con **
        EndIf

         If _FileGetExt($sPath_Curr & $Search_FileRes) = $sExt Then ;Si el archivo encontrado es .jpg entonces copiamos

FileCopy($sPath_Curr & $Search_FileRes, $sDest & "\" ,8)

         EndIf
      WEnd
      FileClose($Search) ; Cierra el identificador de búsqueda
      $sPath = StringTrimLeft($sPath, $sPath_CurrLen + 1) ; Extrae el nombre del directorio en el cual se busco anteriormente para buscar en el siguiente...
   WEnd
EndFunc   ;==>_BackupImages

; Función:    _FileGetExt()
; Descripción: Retorna la extensión del archivo indicado
; Autor:     PDF

Func _FileGetExt($sFilepath)
     Local $sRet, $sPos, $sFileName
     ; If Not FileExists($sFilepath) Then Return SetError(1) ; El archivo no existe
     If (DirGetSize($sFilepath, 2) <> -1) Then Return SetError(2, 1) ; Es una carpeta
     $sFileName = StringTrimLeft($sFilepath, StringInStr($sFilepath, "\", 1, -1))
     $sPos = StringInStr($sFileName, ".", 1, -1)
     If $sPos = 0 Then Return SetError(1) ; El archivo no tiene extensión
     $sRet = StringTrimLeft($sFileName, $sPos - 1) ; Extrae la extensión
     If Not $sRet Then Return SetError(3) ;El nombre del archivo no es valido
     Return $sRet
EndFunc   ;==>_FileGetExt
Espero se entienda, Saludos...