Clonar carpetas (o directorios) desde VFP

958 views
Skip to first unread message

Edgar Acevedo

unread,
Feb 12, 2012, 1:29:20 AM2/12/12
to publice...@googlegroups.com, Edgar Acevedo
Necesitaba una rutina para "clonar" la carpeta (directorio) que contiene las tablas del sistema que le hice a un cliente.
Tenía que tener las siguientes funcionalidades:

1- Solo deben copiarse los archivos modificados o los nuevos archivos creados.
2- Los archivos que NO HAN SIDO TOCADOS en ambas carpetas no deben copiarse (para no perder tiempo).
3- Si en la carpeta de datos se crea un archivo nuevo, este debe incluirse en la carpeta destino
4- Si en la carpeta de datos se borra un archivo, este también debe ser borrado en la carpeta destino

Todo lo arriba descrito lo hace un programa de distribución gratuita llamado  MIRROR.EXE
Aunque lo pueden encontrar con Google, les incluyo a este email un archivo adjunto llamado MIRROR.XXX que
luego de descargarlo, deben renombrarlo como MIRROR.ZIP y luego descomprimirlo; asi obtendrán el archivo
original:  MIRROR.EXE

La forma en que lo ejecuto desde VFP es la siguiente

   #DEFINE SW_SHOW_INVISIBLE 0
   oShell = createobject("WScript.Shell")
   oShell.Run("MIRROR.EXE C:\SISTEMA  E:\BACKUP", SW_SHOW_INVISIBLE, .T. )
   #UNDEF SW_SHOW_INVISIBLE
   RELEASE oShell

La constante  #DEFINE SW_SHOW_INVISIBLE 0 la utilicé para que NO SE ABRA una ventana mostrando la
ejecución del programa,el cual corre desde una sesión de DOS y muestra los archivos copiados (esas feas
letras blancas sobre fondo negro de la VDM). Ahora que si quieren mostrar "ver" algún tipo de actividad o
mostrar esa fea pantalla de todos modos, tienen entonces las siguientes opciones:

   #DEFINE SW_SHOW_INVISIBLE 0
   #DEFINE SW_SHOW_NORMAL 1
   #DEFINE SW_SHOW_MINIMIZED 2
   #DEFINE SW_SHOW_MAXIMIZED 3
   oShell = createobject("WScript.Shell")
  
oShell.Run("MIRROR.EXE C:\SISTEMA  E:\BACKUP", SW_SHOW_NORMAL, .T. )
   #UNDEF SW_SHOW_INVISIBLE
   #UNDEF SW_SHOW_NORMAL
   #UNDEF SW_SHOW_MINIMIZED
   #UNDEF SW_SHOW_MAXIMIZED
   RELEASE oShell

Y podrán usar entonces: 
SW_SHOW_NORMAL, SW_SHOW_MINIMIZED   o   SW_SHOW_MAXIMIZED

Sintaxis básica del  MIRROR.EXE

MIRROR   <Carpeta Origen>  <Carpeta Destino>

OJO:  La carpeta destino DEBE EXISTIR, aunque sea en blanco.  MIRROR  no creará la carpeta si esta no
existe previamente.

Espero que le sea de utilidad a alguien.
MIRROR.XXX

Carlos Miguel FARIAS

unread,
Feb 12, 2012, 9:53:58 AM2/12/12
to publice...@googlegroups.com
Lo que decis lo podes hacer con un bat que tenga el comando xcopy (del S.O.) apropiadamente configurado.
Yo lo he usado para hacer backups a traves de la red.
Saludos: Miguel, Santa Rosa (LP)

Marco Plaza

unread,
Feb 12, 2012, 10:37:19 AM2/12/12
to Comunidad de Visual Foxpro en Español
Gracias Edgar muy bueno.. la diferencia Carlos es que lo que propone
Edgar es la sincronización de carpetas. Es de mayor utilidad si tienes
archivos grandes o demasiados archivos.. por ejemplo 2000 archivos.. y
cambiaron solo 2.. el programa solo copia esos 2. O si el unico cambio
es qye


Saludos

Marco


On 12 feb, 10:53, Carlos Miguel FARIAS <carlosmiguelfar...@gmail.com>
wrote:
> Lo que decis lo podes hacer con un bat que tenga el comando xcopy (del
> S.O.) apropiadamente configurado.
> Yo lo he usado para hacer backups a traves de la red.
> Saludos: Miguel, Santa Rosa (LP)
>
> El 12 de febrero de 2012 03:29, Edgar Acevedo <aperso...@gmail.com>escribió:
>
>
>
>
>
>
>
> > Necesitaba una rutina para "clonar" la carpeta (directorio) que contiene
> > las tablas del sistema que le hice a un cliente.
> > Tenía que tener las siguientes funcionalidades:
>
> > 1- *Solo* deben copiarse los archivos modificados o los nuevos archivos
> > creados.
> > 2- Los archivos que NO HAN SIDO TOCADOS en ambas carpetas no deben
> > copiarse (para no perder tiempo).
> > 3- Si en la carpeta de datos se crea un archivo nuevo, este debe incluirse
> > en la carpeta destino
> > 4- Si en la carpeta de datos se borra un archivo, este también debe ser
> > borrado en la carpeta destino
>
> > Todo lo arriba descrito lo hace un programa de distribución gratuita
> > llamado  *MIRROR.EXE*
> > Aunque lo pueden encontrar con Google, les incluyo a este email un archivo
> > adjunto llamado *MIRROR.XXX* que
> > luego de descargarlo, deben renombrarlo como MIRROR.ZIP y luego
> > descomprimirlo; asi obtendrán el archivo
> > original:  *MIRROR.EXE *
>
> > La forma en que lo ejecuto desde VFP es la siguiente
>
> > *   #DEFINE SW_SHOW_INVISIBLE 0
> >    oShell = createobject("WScript.Shell")
> >    oShell.Run("MIRROR.EXE C:\SISTEMA  E:\BACKUP", SW_SHOW_INVISIBLE, .T. )
> >    #UNDEF SW_SHOW_INVISIBLE
> >    RELEASE oShell
> > *
> > La constante  *#DEFINE SW_SHOW_INVISIBLE 0* la utilicé para que NO SE
> > ABRA una ventana mostrando la
> > ejecución del programa,el cual corre desde una sesión de DOS y muestra los
> > archivos copiados (esas feas
> > letras blancas sobre fondo negro de la VDM). Ahora que si quieren mostrar
> > "ver" algún tipo de actividad o
> > mostrar esa fea pantalla de todos modos, tienen entonces las siguientes
> > opciones:
>
> > *   #DEFINE SW_SHOW_INVISIBLE 0
> >    #DEFINE SW_SHOW_NORMAL 1
> >    #DEFINE SW_SHOW_MINIMIZED 2
> >    #DEFINE SW_SHOW_MAXIMIZED 3
> >    oShell = createobject("WScript.Shell")
> >    **oShell.Run("MIRROR.EXE C:\SISTEMA  E:\BACKUP", **SW_SHOW_NORMAL**,
> > .T. )*
> > *    #UNDEF SW_SHOW_INVISIBLE
> >    #UNDEF SW_SHOW_NORMAL
> >    #UNDEF SW_SHOW_MINIMIZED
> >    #UNDEF SW_SHOW_MAXIMIZED
> >    RELEASE oShell
> > *
> > Y podrán usar entonces:  *SW_SHOW_NORMAL, **SW_SHOW_MINIMIZED*   o   *
> > SW_SHOW_MAXIMIZED*
>
> > Sintaxis básica del  *MIRROR.EXE*
>
> > *MIRROR   <Carpeta Origen>  <Carpeta Destino>*
>
> > *OJO:*  La carpeta destino DEBE EXISTIR, aunque sea en blanco.  MIRROR

Edgar Acevedo

unread,
Feb 12, 2012, 10:57:18 AM2/12/12
to publice...@googlegroups.com
Gracias Marco, es justamente como lo expones:

Tengo en la carpeta  C:\SISTEMA  unos 4,000 archivos.  Algunos de ellos son enormes.  En total son cerca de 5 Gbytes de archivos.  A veces resulta que solo 5 o 6 archivos sufrieron modificaciones y todo el resto esta intacto, entonces  MIRROR.EXE me hace la maravilla de solamente copiar estos 5 o 6 archivos modificados y no toca el resto.

NO ES PERFECTO, a veces  SI TOCA archivos que tampoco sufrieron cambios, pero esto solo suele suceder con "algunos" archivos que contienen imágenes (BMP, JPG o PNG).  De todos modos, lo que sugiere Carlos también es muy sabio, pero en todo caso no vale la pena utilizar el  XCOPY que es lento y limitado, si lo comparas con el  ROBOCOPY  o con el  RICHCOPY, que te permiten hacer trabajo como el MIRROR.EXE, pero con mas parámetros.    Por eso preferí el MIRROR.EXE: "por simplón", pero podría obtener el mismo resultado con el ROBOCOPY  o  con el  RICHCOPY.

Por cierto, al trabajar con archivos  .BAT  me he topado con la desagradable sorpresa de que en la oficina de algunos clientes hay patojos (muchachos) tentones que se meten a trasetear (husmear inapropiadamente) los archivos .BAT.  Por ello me he visto en la necesidad de compilarlos a  .COM


Gracias por sus lecturas amigos....!!!!

Carlos Miguel FARIAS

unread,
Feb 12, 2012, 5:34:24 PM2/12/12
to publice...@googlegroups.com
Por eso mismo, hay opciones del xcopy que solo te copian los que se modificaron, ojo, no digo que los otros programas no son mejores. Tenes Beyond compare que tambien te analiza no solo por fechas si no por contenidos y es muy efectivo.
Justamente cuando usaba el xcopy tenia que comparar directorios con enormidad de archivos y subdirectorios, y con un xcopy sincronizaba todo.
Pero a veces la solución mas simple es la "mas mejor".
Saludos: Miguel, La Pampa (RA)

Marcelo Barberis

unread,
Feb 12, 2012, 6:47:15 PM2/12/12
to publice...@googlegroups.com
Edgar
Tengo unas consultas para hacerte para este programas que expones:
1.- Una vez que tenga el programa mirror.exe, en mi aplicacion donde lo tengo que ubicar? en la carpeta del sistema en forma obligatoria o en puede ser en una carpeta separada, por decirte en "d:\misistema\librerias"?
2.- Yo estoy desarrollando un sistema administrativo que se base en seleccionar una empresa para poder trabajar, por lo que el administrador puede crear una empresa y esta se crea en una carpeta aparte por ej. "Emp01..." por lo que tengo una carpeta Base para realizar este trabajo, para esta forma de trabajar del sistema me serviria utilizar mirror.exe?
3.- Algo similar al punto 2 pero he desarrollado un sistema que trabaja con gestiones, llegado a fin de año, se cierra y el usuario debe crear una nueva gestion, para lo cual el sistema dispone de una carpeta base, pero la diferencia a lo anterior es que en este sistema se crean nuevos registros de socios en este caso y estos socios se copian tambien a la carpeta base para cuando ingresamos a una nueva gestion de la carpeta base esten disponible para el inicio de la nueva gestion, en este caso me serviria mirror.exe?
4.- La idea mia es ponerlo cuando uno cierra el sistema que aparezca esta opcion para realizar copias de respaldos automaticos

Marcelo Barberis

Edgar Acevedo

unread,
Feb 12, 2012, 7:04:36 PM2/12/12
to publice...@googlegroups.com
El ejecutable  MIRROR.EXE lo puedes poner en la carpeta (directorio) donde radica tu aplicación o lo puedes poner en C:\WINDOWS para poderlo acceder con facilidad desde cualquier lugar.  NO importa donde lo pongas, siempre que al invocarlo incluyas el PATH donde se encuentra, no tendrás problemas.

Yo le doy diversos usos.  Uno de ellos es el mismo que vos me planteas:  Tengo un sistema multi-empresa que guarda las tablas y bases de datos de cada empresa en una carpeta diferente:   EMPRESA01, EMPRESA02, etc.
Adicionalmente, a veces envío copias de las carpetas   EMPRESA*  hacia unidades de USB porque el gerente de la empresa se lleva dichos datos a su equipo portatil para poder analizar la información fuera de la empresa sin necesidad de conectarse por mando remoto o Logmein a su oficina.  También lo utilizo en una enorme empresa financiera que maneja varias agencias remotas y tengo que hacer "imágenes" de las carpetas de datos de cada agencia mediante  Hamachi  (o una VPN privada):   MIRROR   K:\AGENCIA01   C:\AGENCIA01

MIRROR.EXE  te saca una imagen de una carpeta origen hacia una carpeta destino.  Si la carpeta destino YA TIENE archivos, solamente copia aquellos que en la carpeta origen hayan sufrido cambios.  Si la carpeta destino tiene archivos que en la carpeta origen ya fueron eliminados,  MIRROR.EXE también te los eliminará de la carpeta destino.  Y el uso de MIRROR.EXE es muy directo y sencillo.  Los pocos parámetros u opciones que tiene yo JAMAS los he necesitado.  SIEMPRE lo he usado en su forma mas simple:

MIRROR   < carpeta origen >  < carpeta destino >

ej.

MIRROR   D:\EMPRESA01   E:\EMPRESA01

Ahora que si quieres hacer cosas "mas interesantes", podrás optar por bajarte de la web el  ROBOCOPY  o  el  RICHCOPY, que te permiten cosas mas complejas como: 
- Actualizar solo los archivos mayores (o menores) a cierta fecha.
- Escoger que archivos incluir (o excluir) mediante un listado específico.
...y otra serie de coqueterías mas, que en lo personal nunca he necesitado pues me ha bastado con la simplicidad, confiabilidad y velocidad de  MIRROR.EXE

Salu2,



Edgar

Julio Cesar Vente Ruiz

unread,
Feb 19, 2012, 10:34:25 AM2/19/12
to publice...@googlegroups.com
Hola como dice Carlos Miguel FARIAS, en algunos casos la solucion mas simple resulta ser la mejor....
En mi caso utilizo un BAT con xcopy, el cual para que nadie me lo modifique lo que hago es que el mismo sistema cree el archivo BAT con las instrucciones de copiado.

Este ejemplo copia solo archivos nuevos o con cambios de la unidad C: a la unidad E: incluyendo subcarpetas...
xcopy C:\Desarrollo\* E:\copia_desarrollo\ /D /Y /R /H /C /S

Saludos..
--


Julio Cesar Vente Ruiz

Walter R. Ojeda Valiente

unread,
Feb 19, 2012, 10:49:23 AM2/19/12
to publice...@googlegroups.com
Esa es una muy buena idea:
- Crear el archivo .BAT
- Ejecutarlo
- Borrar el archivo .BAT

Así te evitas que algún tipejo curioso meta sus pezuñas donde no debe.

Saludos.

Walter.




Date: Sun, 19 Feb 2012 10:34:25 -0500
Subject: Re: [vfp] Clonar carpetas (o directorios) desde VFP
From: jvent...@gmail.com
To: publice...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages