В моем приложении на C # я также использую robocopy с параметром /s для копирования подпапок.

Предположим, у меня есть файлы и папки с прошлого месяца.

Какой файл он будет копировать первым, последний или старый?

Есть ли способ указать, что сначала нужно скопировать старый файл или наоборот?

2 ответа2

2

robocopy сначала скопирует файлы и каталоги, которые он сначала получает из ОС. Если вы хотите конкретный заказ - вы должны позаботиться об этом:

  • список ваших файлов
  • упорядочить их по дате
  • вызовите robocopy для каждого файла

это должно решить вашу проблему.

2

Если вы хотите сначала скопировать новые (последние) файлы, вы можете использовать параметры командной строки Robocopy /MAXAGE:n и /MINAGE:n .

Вам придется запускать Robocopy 2 или более раз (в зависимости от того, насколько вы хотите контролировать порядок копирования файлов по "возрасту" файлов).

Вот информация о параметрах командной строки /MAXAGE:n и /MINAGE:n :

/MAXAGE:n :: MAXimum file AGE - exclude files older than n days/date.
/MINAGE:n :: MINimum file AGE - exclude files newer than n days/date.
    (If n < 1900 then n = n days, else n = YYYYMMDD date).

Например, в простейшем случае вы можете сначала скопировать файлы AT-MOST 1-дневного возраста, а затем, когда это будет сделано, скопировать все файлы AT-LEAST 1-дневного возраста. Вот 2 командной строки Robocopy для этого (первого) примера:

First run of Robocopy:
    robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MAXAGE:1
Second run of Robocopy:
    robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MINAGE:1

Если вы хотите больше контроля, чем это, вы можете объединить 2 варианта. Например:

  1. Сначала скопируйте все файлы, которые AT-MOST, 1 день
  2. Затем скопируйте файлы AT-LEAST 1 дня и AT-MOST 2 дня
  3. Затем скопируйте файлы AT-LEAST 2 дня и AT-MOST 3 дня
  4. Затем скопируйте файлы AT-LEAST 3 дней и AT-MOST 5 дней
  5. Затем скопируйте файлы по крайней мере 5 дней назад (все оставшиеся файлы)

Вот командные строки Robocopy для этого (второго) примера:

robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MAXAGE:1
robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MAXAGE:2 /MINAGE:1
robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MAXAGE:3 /MINAGE:2
robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MAXAGE:5 /MINAGE:3
robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MINAGE:5


Если вы хотите увидеть порядок, который Robocopy будет использовать для копирования файлов, вы можете использовать параметр /L :

robocopy "C:\source\path" "C:\dest\path" /S /COPY:DAT /DCOPY:T /MAXAGE:1 /L

С параметром /L Robocopy будет просто перечислять файлы, которые "будут" скопированы, но фактически не будет копировать какие-либо файлы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .