Archivo por lotes robocopy bidireccional

1

Tengo una unidad flash USB donde tengo una carpeta llamada X que siempre debe ser como la carpeta Y en mi computadora portátil y viceversa, dependiendo de las últimas acciones. Por ejemplo, si elimino algo en la carpeta Y, también debe eliminarse en la carpeta X (tan pronto como se conecte la unidad flash) y viceversa. Si agrego una carpeta o un archivo en X, también se debe agregar en Y, tan pronto como se conecte la unidad flash.

Ahora hice un pequeño script por lotes usando robocopy:

@echo off
robocopy "D:\AC ActiveZone Mobile" "C:\AC ActiveZone" /MIR
PAUSE

La carpeta ActiveZone Mobile es nuestra carpeta X y la ActiveZone es nuestra carpeta Y. El problema ahora es que esto no parece ser una sincronización bidireccional. Demostraré que:

1.) Tanto las carpetas como sus subcarpetas y archivos son identificados 2.) Creó el nuevo archivo T1 en la carpeta X 3.) Creó el nuevo archivo T2 en la carpeta Y 4.) Ejecutó el script

Resultado: en lugar de tener T1 y T2 en ambas carpetas X e Y, ahora solo tengo T1 en ambas carpetas X e Y.

Además, (después de la primera prueba anterior) si elimino T1 en la carpeta Y y ejecuto el script, todo lo que obtengo es un nuevo T1 en la carpeta Y. Pero la acción de eliminación de T1 en Y no es más antigua sino más nueva que la creación de T1 en X. Quiero que T1 también se elimine en X en lugar de que T1 se copie de X a Y.

¿Cómo hacer esto con un script por lotes?

usuario197915
fuente
3
robocopy es la herramienta incorrecta para esto por varias razones. Primero, no copiará archivos abiertos, lo que será un problema real. Tampoco es una herramienta de sincronización. Simplemente copiar ambas direcciones tampoco lo convierte en una. Necesita algo que vea las marcas de tiempo modificadas. Mire SyncToy: microsoft.com/en-us/download/details.aspx?id=15155 o rsync: rsync.net/resources/howto/windows_rsync.html o GDrive: drive.google.com/#my-drive
krowe
@krowe: probablemente deberías responder tu comentario. Personalmente, lo aceptaría.
Ilia Barahovski

Respuestas:

4

Um, fácil. Simplemente ejecútelo de dos maneras, excluyendo archivos antiguos:

@ECHO OFF
ECHO Two way mirror between %1 and %2, continue?
PAUSE
robocopy %2 %1 /E /DST /FFT /XO /XJ
robocopy %1 %2 /E /DST /FFT /XO /XJ

Esto debería preservar la copia más nueva si el archivo existe en ambas ubicaciones. Uso / DST y / FFT porque las diferencias de marca de tiempo NTFS / FAT32 a menudo causan falsas comparaciones inválidas de lo contrario. También excluyo personalmente Thumbs.db, desktop.ini, etc.

Si desea eliminar archivos no existentes, debe decidir cuál es la ubicación "maestra", colóquela en la segunda línea y cambie / E a / MIR en su lugar. Creo que su idea de saber si un archivo se eliminó de uno u otro en lugar de uno simplemente no tiene un archivo que el otro tiene es imposible sin algún tipo de seguimiento que esté más allá de lo que puede hacer la robocopia.

Darkfalz
fuente
Re: "tienes que decidir cuál es la ubicación" maestra ", colócala en la segunda línea y cambia / E a / MIR" ... No creo que esto funcione. La primera línea recrearía el archivo en tu "maestro", ¿no?
Graham Charles
-1

Use el Centro de sincronización en el Panel de control para resolver este tipo de problema. Robocopy es la 'Herramienta de Copia Robusta' y solo copiará pero incluirá otra información como marcas de tiempo. No se sincroniza, pero 'Siempre disponible sin conexión' sí. O utilice el antiguo "Maletín".

EdG
fuente