Saltar al contenido

Encontrar ultimos archivos modificados en carpeta, obtener string y comprimir


Recommended Posts

publicado

Hola!

Acudo nuevamente a la sabiduria de los usuarios de este foro.

Mi consulta es la siguiente, en una carpeta tengo varios archivos con un formato o extensión .dbf .prj .shp .shx, estos tienen el mismo nombre pero cambian solo la extensión. Pero tengo casos en que existen varias versiones de estos archivos de las cuales necesito obtener el nombre de la ultima version, es decir la ultima modificada.

Por lo que tendria que tener, en primer lugar, el nombre de los ultimos archivos modificados para lo cual defino la siguiente funcion:

Function encontrar_ultimo(sitio As String) As String
ruta = ActiveWorkbook.Path & "\" & sitio
'codigo de busqueda
End Function
[/CODE]

Lo que me faltaria para encontrar el nombre del archivo por el codigo. Ahora bien como los nombre de cada extension es el mismo buscaria por solo una extensio, la .dbf

Luego, necesito comprimir estos archivos en un .rar (por ejemplo), para lo cual tengo el siguiente codigo que obtuve a partir del sitio de winrar: WinRAR España - Manual de uso, lo cual se deberia ejecutar mediante la activacion desde una macro por la linea de comando, ahora la pregunta es como se haria eso?

Tengo lo siguiente hasta el momento:

[CODE]Sub comprime_polyline()
'winrar a -afrar -ibck -m3 NOMBRE *.dbf *.prj *shp *.shx *.txt
nf = numerofilas()
For i = 2 To nf
sitio = Range("A" & i).Value
polyline_version = encontrar_ultimo(sitio)
Nombre = Range("J" & i).Value
'winrar a -afrar -ibck -m3 NOMBRE *.dbf *.prj *shp *.shx *.txt
Next i
End Sub[/CODE]

Este programa leeria una serie de filas, de las que obtendria el nombre de un sitio, ingreso a la carpeta, busco los ultimos modificados y comprimo.

Se agradece la ayuda

publicado

Encontré esto, para ejecutar un programa desde una macro (cualquier .exe) basta con

Shell "cmd.exe:", vbNormalFocus[/CODE]

Ahora bien, la segunda variable asigna en como se muestra el programa ejecutado.

vbminimizedfocus

vbhide, entre otras son las opciones

Me falta saber como ejecutar un comando

publicado

Bueno, me voy contestando a medida que puedo avanzar en esto.

Para comprimir rar y ejecutar en consola, primero tienen que tener instalado winrar y copiar sus archivos ejecutables rar y unrar en las carpetas de sistema system32 y sys64 de windows.

Con eso funcionará el siguiente código:

Sub ejecuta_cmd()
'Shell "cmd.exe \F:", vbNormalFocus
'CommandLine = "dir "F:\test"" & FileSpec & "" " /s/b > " "" & RedirectTo & """"
'Here, the output of a Dir command is redirected to a file-path you specify
'in the RedirectTo (string variable). The /s/b are options to the Dir command
'that tell it to recurse throught its subdirectories and not to include header
'or summary information.
'fuente http://www.mrexcel.com/forum/excel-questions/580989-shell-commands-excel.html
CommandLine = "rar a -r F:\NOMBRE F:\Test2\*.png"
'CommandLine = "copy F:\test\* F:\test2" funciona bien
Shell Environ$("comspec") & " /k " & CommandLine, vbNormalFocus
'Shell Environ$("comspec") & " /c xcopy """ & F:\test\* & """ """ & F:\test2 & """ " & CommandLine, vbNormalFocus
End Sub[/CODE]

En el comando '/c' hace que la consola no se vea

/k que si se vea (es bueno para debuggear poder ver que se hace, luego lo cambian a /c)

slds

publicado

Luego de varias vueltas, he podido encontrar la solción correcta, la adjunto como código:

RAR necesita de un archivo .lst con la lista de archivos a comprimir, se construye como sigue:

'generacion de un archivo lista de los archivos a comprimir

Function lista_poly(sitio As String, polyline As String, cobertura As String) As String
ruta = ActiveWorkbook.Path & "\" & sitio & "\"
'Inicializo strings
Dim DBF As String
Dim PRJ As String
Dim SHP As String
Dim SHX As String
Dim Cob As String
DBF = sitio & "\" & polyline & ".dbf"
PRJ = sitio & "\" & polyline & ".prj"
SHP = sitio & "\" & polyline & ".shp"
SHX = sitio & "\" & polyline & ".shx"
TEX = sitio & "\" & cobertura & ".txt"
f = FreeFile
Open ruta & "lista_" & sitio & ".lst" For Output As #f
Write #f, DBF
Write #f, PRJ
Write #f, SHP
Write #f, SHX
Write #f, TEX
Close f
lista_poly = "lista_" & sitio & ".lst"
End Function
[/CODE]

La siguiente rutina es para comprimir archivos polyline y cobertura en rar

[CODE]
Sub comprime_polyline()

'inicializo strings
Dim sitio As String
Dim polyline_version As String
Dim comando_rar As String
Dim listapoly As String
Dim cobertura As String

nf = numerofilas()
'obtiene la ruta donde está trabajando la planilla (Importante!!!)
ruta = ActiveWorkbook.Path

'comienza bucle que lee los datos de cada sitio y entrega el archivo comprimido
'con las polyline y cobertura

For i = 2 To nf

'A es al columna de nombres de sitios o siteID
sitio = Range("A" & i).Value
'verificar que exista carpeta
If testDir(ruta & "\" & sitio) = True Then
polyline_version = encontrar_ultimo(Range("A" & i).Value)
cobertura = Range("J" & i).Value
listapoly = lista_poly(sitio, polyline_version, cobertura)
'J es la columna que entrega un string con el nombre de sitio y radio cobertura
comando_rar = "rar a -r -ep1 " & sitio & " @" & sitio & "\" & listapoly
'MsgBox comando_rar
'Cambiar a disco F:
'winrar a -afrar -ibck -m3 NOMBRE *.dbf *.prj *shp *.shx *.txt
'EL comando que permite comprimir desde terminal CMD, visible:
'Shell Environ$("comspec") & " /k " & "f: &" & comando_rar, vbNormalFocus
'Cuando se tiene todo funcionando bien se pasa a una ejecucion invisible del comando:
Shell Environ$("comspec") & " /c " & "f: &" & comando_rar, vbHide
Else
Stop
End If

Next i

End Sub[/CODE]

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.