Вопрос или проблема
У меня есть 3 каталога DIR1 DIR2 DIR3 на флешке, и я хотел бы зеркально отобразить их в каталогах с теми же именами в пункте назначения.
robocopy "F:\" "E:\" /MIR /E /COPYALL /DCOPY:DATE /MT:12 /Z /TEE /LOG:"C:\Users\Alessandro\Documents\PS_scripts\robocopy_logs\log_robocopy_mirroring_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"
Это команда, которую я бы использовал, но я не знаю, что добавить, чтобы исключить другие каталоги в пункте назначения.
Ответ или решение
Использование команды ROBOCOPY для зеркалирования нескольких каталогов с пендрайва (например, каталоги DIR1, DIR2 и DIR3) в каталоге назначения с теми же именами, но без копирования других каталогов назначения, требует некоторой тонкой настройки. В этом случае нам потребуется выполнить более избирательное копирование только тех каталогов, которые непосредственно нас интересуют. Давайте разберем, как это можно организовать.
Теория
ROBOCOPY (Robust File Copy) — это мощная утилита командной строки для Windows, предназначенная для копирования и синхронизации файлов и директорий. Один из наиболее часто используемых параметров ROBOCOPY — это режим зеркалирования (/MIR), который предназначен для полного дублирования структуры и содержимого исходного каталога в каталоге назначения. Это также включает удаление файлов в каталоге назначения, которые отсутствуют в исходном каталоге.
Однако ключевая задача в данном случае — зеркалирование только заданных подкаталогов (DIR1, DIR2, DIR3), без затрагивания других директорий в каталоге назначения. В этом контексте стандартная команда /MIR
, если использовать её без уточнений, будет отражать всю структуру каталогов, что может привести к ненужному копированию и удалению излишних директорий.
Пример
Вот пример команды ROBOCOPY, которая делает то, что вам нужно, добавляя важные параметры для указания интересующих каталогов:
robocopy "F:\DIR1" "E:\DIR1" /MIR /E /COPYALL /DCOPY:DATE /MT:12 /Z /TEE /LOG:"C:\Users\Alessandro\Documents\PS_scripts\robocopy_logs\log_DIR1_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"
robocopy "F:\DIR2" "E:\DIR2" /MIR /E /COPYALL /DCOPY:DATE /MT:12 /Z /TEE /LOG:"C:\Users\Alessandro\Documents\PS_scripts\robocopy_logs\log_DIR2_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"
robocopy "F:\DIR3" "E:\DIR3" /MIR /E /COPYALL /DCOPY:DATE /MT:12 /Z /TEE /LOG:"C:\Users\Alessandro\Documents\PS_scripts\robocopy_logs\log_DIR3_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"
Применение
В вышеприведенных примерах команды копируют данные из каждого источника DIR1, DIR2, и DIR3 в соответствующие им каталоги назначения (в данном случае — в том же самом каталоге на диске E:). Параметр /MIR
обеспечивает полное соответствие содержимого этих директорий между источником и назначением.
При этом используемые опции имеют следующие значения:
/MIR
: Зеркалирование каталога и его содержимого./E
: Включает подкаталоги, включая пустые./COPYALL
: Копирует все атрибуты файла, включая время создания, разрешения и так далее./DCOPY:DATE
: Обеспечивает копирование метаданных даты./MT:12
: Использует многоядерное копирование, ускоряя процесс благодаря распараллеливанию./Z
: Обеспечивает возможность возобновления копирования при обрыве сети или другого сбоя./TEE
: Отображает выходные данные команды на экран в дополнение к их регистрации в файл./LOG
для каждого действия с сохранением логов в уникальные файлы, в том числе с отметкой времени, что полезно для аудита операций копирования.
Этот подход также допускает возможность расширения или изменения для будущих необходимых директорий. Если в будущем у вас появятся дополнительные каталоги, которые нужно скопировать, просто добавьте новые строки с соответствующими командами.`
Таким образом, вы можете добиться желаемого результата, исключая копирование и синхронизацию ненужных каталогов, облегчая управление данными и ограничивая копирование только нужными подкаталогами на уровне командной строки с помощью ROBOCOPY.