
У меня есть USB-флешка, на которой у меня есть папка X, которая всегда должна быть как папка Y на моем ноутбуке и наоборот, в зависимости от последних действий. Например, если я удаляю что-то в папке Y, оно также должно быть удалено в папке X (как только подключается флешка) и наоборот. Если я добавляю папку или файл в X, оно также должно быть добавлено в Y, как только подключается флешка.
Теперь я сделал короткий пакетный скрипт с помощью robocopy:
@echo off
robocopy "D:\AC ActiveZone Mobile" "C:\AC ActiveZone" /MIR
PAUSE
Папка ActiveZone Mobile — это наша папка X, а ActiveZone — это наша папка Y. Проблема в том, что это, похоже, не двусторонняя синхронизация. Я продемонстрирую это:
1.) Обе папки, а также их подпапки и файлы идентифицированы. 2.) Создан новый файл T1 в папке X. 3.) Создан новый файл T2 в папке Y. 4.) Запущен скрипт.
Результат: вместо того, чтобы иметь T1 и T2 в обеих папках X и Y, теперь у меня есть только T1 в обеих папках X и Y.
Кроме того, (после первого теста выше) если я удаляю T1 в папке Y и запускаю скрипт, все, что я получаю, это новый T1 в папке Y. Но действие удаления T1 в Y не старше, а новее создания T1 в X. Я хочу, чтобы T1 также был удален в X вместо того, чтобы T1 копировался из X в Y.
Как это сделать с помощью пакетного скрипта?
решение1
Эм, легко. Просто запустите его двумя способами, исключая старые файлы:
@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
Это должно сохранить более новую копию, если файл существует в обоих местах. Я использую /DST и /FFT, потому что различия во временных метках NTFS/FAT32 часто приводят к ложным недействительным сравнениям. Я также лично исключаю Thumbs.db, desktop.ini и т. д.
Если вы хотите удалить несуществующие файлы, вам нужно решить, какое местоположение является "главным", поместить его во вторую строку и изменить /E на /MIR. Я думаю, что ваша идея узнать, был ли файл удален с одного или другого, в отличие от того, что у одного просто нет файла, который есть у другого, невозможна без какого-либо отслеживания, которое выходит за рамки того, что может сделать robocopy.