Robocopy: как скопировать все файлы в папке, новее определенной даты (включая старые файлы)

Вопрос или проблема

В Robocopy есть такая опция:
/maxage: Указывает максимальный возраст файла (для исключения файлов старше N дней или даты).

В моем случае я хочу копировать все данные, помещенные в новую папку, которая создается каждый день моими коллегами. Данные обычно содержат файлы, старше даты, когда они копируются. Другими словами, может ли Robocopy копировать все данные по дате содержащей папки?

Надеюсь, вы сможете помочь мне решить эту проблему. Спасибо!! 🙂

Ниже приведены ссылки, которые могут быть полезны и имеют решение для вашего вопроса

Команда Robocopy для копирования обновленных файлов и длинных имен путей

https://stackoverflow.com/questions/31064976/how-to-use-robocopy-to-copy-files-with-timestamp-in-command-line

Ответ или решение

Использование Robocopy для копирования файлов по дате папки

Введение

Robocopy – мощный инструмент для копирования файлов и директорий в среде Windows, который предлагает широкий набор опций для управления процессом копирования. Ваша задача заключается в том, чтобы скопировать все файлы из новой папки, создаваемой вашими коллегами каждый день, включая файлы, которые могут иметь дату создания или изменения, превышающую текущую дату. Это может быть непростой задачей, особенно если уже существуют определенные файлы в этих папках, и вам нужно осуществлять копирование без исключения старых файлов.

Понимание ключевых параметров Robocopy

Для решения вашей задачи, обратим внимание на параметр /maxage. Как указано, он позволяет исключать файлы старше указанного количества дней или конкретной даты. Однако, в вашем случае, вам необходимо скопировать все файлы, независимо от их времени создания или изменения. Мы также рассмотрим, как можно использовать другие параметры Robocopy для достижения желаемого результата.

Решение

Если ваша цель состоит в том, чтобы скопировать все файлы из новой папки, созданной вашими коллегами, вы не можете использовать параметр /maxage, так как он исключает старые файлы. Вместо этого вам нужно будет использовать основные команды Robocopy, как показано ниже.

Пример команды Robocopy

robocopy "C:\ИсходнаяПапка" "D:\ЦелеваяПапка" /E /COPY:DAT /R:3 /W:5

Разъяснение параметров:

  • "C:\ИсходнаяПапка" – путь к папке, из которой вы хотите копировать файлы.
  • "D:\ЦелеваяПапка" – путь к целевой папке, куда будут скопированы файлы.
  • /E – позволяет копировать все подкаталоги, включая пустые.
  • /COPY:DAT – определяет, какие атрибуты файлов будут скопированы: D (данные), A (атрибуты), T (время).
  • /R:3 – количество попыток повторного копирования в случае неудачи (в данном случае 3).
  • /W:5 – время ожидания между попытками (в данном случае 5 секунд).

Копирование по дате папки

Хотя Robocopy не имеет прямого встроенного параметра для копирования всех файлов, основываясь на дате папки, вы можете использовать комбинацию PowerShell и Robocopy. В этом случае вы можете получить дату создания папки и использовать её для фильтрации файлов в процессе копирования.

Пример скрипта

$folderPath = "C:\ИсходнаяПапка"
$targetPath = "D:\ЦелеваяПапка"

# Получаем дату создания папки
$folderCreationDate = (Get-Date (Get-Item $folderPath).CreationTime)

# Копируем файлы с учетом даты
Get-ChildItem $folderPath | Where-Object { $_.CreationTime -ge $folderCreationDate } | ForEach-Object {
    robocopy $_.FullName $targetPath /E /COPY:DAT
}

Завершение

Используя приведенные выше команды и скрипты, вы сможете успешно скопировать все необходимые файлы из папки на основе их времени создания. Robocopy, благодаря своей гибкости, предоставляет множество возможностей для настройки процесса копирования, что делает его идеальным инструментом для работы с файлами и директориями. Убедитесь, что вы протестировали команды в безопасной среде перед применением к живым данным, чтобы избежать потери информации.

Оцените материал
Добавить комментарий

Капча загружается...