Теоретически, использование /DCOPY:Tдолжно решить все ваши проблемы.
Но я видел, как это произошло, и я не уверен, что назвал бы это «ошибкой», а скорее следствием последовательности операций (ОК, ошибка).
Эта команда должна работать для копирования всех файлов из C:\Brushesв D:\NEWBrushes, и /DCOPY:Tдолжна вызывать копирование меток времени исходной папки в папку назначения:
robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T
Что я видел (по крайней мере, в некоторых версиях Robocopy), так это то, что команда выполнена успешно, но отметка времени D:\NEWBrushesпапки установлена на текущую дату и время.
Таким образом, похоже, что эта /DCOPY:Tфункция не работает для «базовой» (самой верхней) папки, которую вы копируете.
Я полагаю, что это работает, но что временная метка папки назначения "наступает" операциями, которые позже в последовательности операций.
То, что я считаю, происходит с этой командой:
robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T
это что-то вроде этого:
- Создать папку,
D:\NEWBrushesесли она еще не существует
- Скопируйте метку времени из
C:\BrushesвD:\NEWBrushes
- Копировать файлы и подпапки из
C:\BrushesвD:\NEWBrushes
Похоже, что шаг 3, изменение содержимого папки D:\NEWBrushesвызывает изменение временной метки D:\NEWBrushes.
Для меня «обходной путь» состоял в том, чтобы запустить robocopyкоманду для копирования файлов и папок, а затем выполнить (ту же) robocopyкоманду во второй раз.
Итак, при первом запуске:
robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T
все файлы и папки будут скопированы. Затем запустите его снова:
robocopy "C:\Brushes" "D:\NEWBrushes" /COPY:DAT /DCOPY:T
(or)
robocopy "C:\Brushes" "D:\NEWBrushes" /DCOPY:T
Во время второго robocopyзапуска никакие файлы или папки внутри D:\NEWBrushesне будут изменены, и /DCOPY:Tопция скажет robocopyскопировать метку времени из C:\Brushesв D:\NEWBrushes(если нет папок / файлов C:\Brushes, которые изменились со времени первого запуска robocopy).
rsync, но что если у вас нет косой черты в конце вашей целевой папки? Как насчет попытки изменить скрипт на уровне командной строки вместо использования графического интерфейса? Я точно знаю, что инструмент командной строки будет делать то, что вам нужно.