Это действительно кажется странным поведением, поскольку можно было бы подумать, что вы пытаетесь использовать переключатель /MINAGE
для выбора всего, что младше 1 января 2019 г. Затем объедините его с переключателем /MIR
или, точнее, переключателем /PURGE /E
, чтобы удалить лишние файлы и каталоги, созданные после 1 января 2019 г.
Причина того, что это не работает, заключается в том, что переключатель /MINAGE
влияет только на файлы, которые выбраны для копирования, даже если команда /MIR
работает должным образом.
Скажем, у нас есть 2 файла, 1 старше 1 января 2019 г. и один новее.
C:\Source C:\Destination
File-2018.txt
File-2019.txt
Когда мы запускаем стандартную команду \MIR
:
Robocopy.exe C:\Source C:\Destination /MIR
Оба файла будут скопированы должным образом.
2 files Copied
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
Если мы добавим дополнительный файл в место назначения:
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
File-2020.txt
И повторно запустите команду /MIR
:
Robocopy.exe C:\Source C:\Destination /MIR
Получаем, как и положено, лишний файл удаляется:
2 files Skipped
1 files Extras
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
К команде \MIR
, когда мы затем добавляем параметр /MINAGE
, думая, что мы просим, чтобы все 1 января 2019 года и старше оставалось, а остальное оставалось:
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
Получаем неожиданное:
2 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
Чтобы лучше проиллюстрировать, что происходит и почему файлы пропущены, давайте добавим еще один параметр, Include Skipped \IS
:
Robocopy.exe C:\Source C:\Destination /MIR /IS /MINAGE:20190101
Мы получаем:
1 files Copied
1 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
Это означает, что параметр \MINAGE
отфильтровал только то, что мы хотели скопировать. Если мы сбросим, очистим каталог и повторно запустим его, мы сможем лучше увидеть, что произошло:
Remove-Item C:\Destination -Force
C:\Source C:\Destination
File-2018.txt
File-2019.txt
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
Мы получаем:
1 files Copied
1 files Skipped
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt
Он скопировал старый файл, а не новый. Это означает, что при итерации файлов в источнике он использовал параметр /MINAGE
, чтобы выяснить только какие файлы мне нужно скопировать, а не какие файлы мне нужно < strong> Удалить.
Причина такого поведения в том, что /MINAGE
и соответствующие параметры /MAXAGE
предназначены для очень больших каталогов с медленными сетевыми ссылками или меньшими конечными компьютерами, где нас обычно интересует только копирование определенных наборов файлов (например, только новые файлы со вчерашнего дня), и не обязательно копировать все файлы. Чаще всего в этих случаях зеркальное отображение обычно не выполняется или не требуется, поскольку набор файлов обычно представляет собой дельта-файлы.
Чтобы выделить копирование вместо удаления, если зеркалируем каталоги, а затем мы добавляем 2 дополнительных файла, один более старый и один более новый в Место назначения:
C:\Source C:\Destination
File-2017.txt
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
File-2020.txt
И снова запустите с включенным пропущенным /IS
, чтобы мы могли видеть, что копируется:
Robocopy.exe C:\Source C:\Destination /MIR /IS /MINAGE:20190101
Получаем несколько удивительное:
1 files Copied
1 files Skipped
2 files Extras
C:\Source C:\Destination
File-2018.txt File-2018.txt
File-2019.txt File-2019.txt
Это подчеркивает, что /MIR
предназначен для ... ну ... зеркалирования. Остальные параметры нужны только для того, чтобы указать что для Копировать.
Начнем с исходных файлов, задействованных в копии:
C:\Source
File-2018.txt
File-2019.txt
Применяем фильтрацию по Включать пропущенные /IS
и /MINAGE
:
C:\Source
File-2018.txt <- 1 files Copied
File-2019.txt <- 1 files Skipped
Затем выполняется команда \MIR
Mirror, которая удаляет все файлы из места назначения, которые не были включены в исходные файлы:
C:\Destination
File-2017.txt <- 2 files Extra
File-2020.txt
Независимо от возраста дополнительных файлов
Простое решение - просто не копировать все сначала. Начните с пустого каталога и копируйте только файлы младше 1 января 2019 г .:
Remove-Item C:\Destination -Force
Robocopy.exe C:\Source C:\Destination /E /MINAGE:20190101
Редактировать
Усовершенствованный метод (вместо того, чтобы сначала удалить весь каталог), вы просто запускаете скрипт очистки в месте назначения, чтобы сначала удалить элементы младше 1 января 2019 года из места назначения:
#Cleanup younger files
Get-ChildItem C:\Destination -Recurse | Where { $_.LastWriteTime -gt (Get-Date '2019-01-01')} | Remove-Item -Force -Recurse -ErrorAction SilentlyContinue
#Mirror over new files
Robocopy.exe C:\Source C:\Destination /MIR /MINAGE:20190101
person
HAL9256
schedule
04.06.2019
1900-01-01...2019-01-01
. у вас есть такие файлы? НИЧЕГО зеркалируется? - person Lee_Dailey   schedule 04.06.2019/mir
. Шаг 2 предназначен только для файлов ДО 2019 и ПОСЛЕ 1900 ... и НЕ перемещает их, а просто копирует их. - person Lee_Dailey   schedule 04.06.2019if/else/endif
разнообразия. Этот вопрос больше подходит для superuser.com. Пожалуйста, прочтите Справку по теме, прежде чем размещать здесь дополнительные вопросы. Удачи. - person shellter   schedule 04.06.2019