
Tenho um pendrive onde tenho uma pasta chamada X que sempre deve ser igual à pasta Y do meu notebook e vice-versa, dependendo das últimas ações. Por exemplo, se eu deletar algo na pasta Y, ele também terá que ser deletado na pasta X (assim que o pen drive for conectado) e vice-versa. Se eu adicionar uma pasta ou arquivo em X, ele também deverá ser adicionado em Y, assim que o pen drive for conectado.
Agora fiz um pequeno script em lote usando robocopy:
@echo off
robocopy "D:\AC ActiveZone Mobile" "C:\AC ActiveZone" /MIR
PAUSE
A pasta ActiveZone Mobile é nossa pasta X e a ActiveZone é nossa pasta Y. O problema agora é que esta parece não ser uma sincronização bidirecional. Vou demonstrar isso:
1.) Ambas as pastas e suas subpastas e arquivos são ident 2.) Criado novo arquivo T1 na pasta X 3.) Criado novo arquivo T2 na pasta Y 4.) Executei o script
Resultado: em vez de ter T1 e T2 nas pastas X e Y, agora só tenho T1 nas pastas X e Y.
Além disso, (após o primeiro teste acima), se eu excluir T1 na pasta Y e executar o script, tudo que obtenho é um novo T1 na pasta Y. Mas a ação de exclusão de T1 em Y não é mais antiga, mas mais recente que a criação de T1 em X. Quero que T1 também seja excluído em X em vez de T1 ser copiado de X para Y.
Como fazer isso com um script em lote?
Responder1
Hum, fácil. Basta executá-lo de duas maneiras, excluindo arquivos mais antigos:
@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
Isso deve preservar a cópia mais recente se o arquivo existir em ambos os locais. Eu uso /DST e /FFT porque diferenças de carimbo de data/hora NTFS/FAT32 geralmente causam comparações falsas e inválidas. Eu também excluo pessoalmente Thumbs.db, desktop.ini etc.
Se você deseja excluir arquivos não existentes, você deve decidir qual é o local "mestre", coloque-o na segunda linha e altere /E para /MIR. Acho que sua ideia de saber se um arquivo foi excluído de um ou de outro, em vez de um simplesmente não ter um arquivo que o outro possui, é impossível sem algum tipo de rastreamento que está além do que o robocopy pode fazer.