Назад | Перейти на главную страницу

Скопируйте несколько папок в одно место назначения с помощью robocopy

Я ищу решение использовать robocopy для копирования нескольких папок из каталога в удаленный сетевой ресурс. Я хочу выбрать несколько папок из каталога, содержащего сотни папок, которые меня не интересуют. Я хочу сделать что-то похожее на scp в Linux с использованием регулярного выражения, но это не работает в robocopy:

c:\robocopy "c:\results\1319_TC1.*" "\\datastore\somefolder\"

Попробуй это:

gci C:\results\1319_TC1.* | foreach-object { robocopy $_.fullname (".\datastore\somefolder\" + $_.name) }

gci C:\results\1319_TC1.* сначала получить все соответствующие файлы / каталоги и передать их через канал, где foreach-object заботится обо всех результатах от первой команды. Он скопирует полный путь к каждому результату (полный путь к вашим каталогам результатов) и поместит их в. \ Datastore \ somefolder \ с исходным именем папки, например:
C:\results\1319_TC1.123456 -> C:\results\datastore\somefolder\1319_TC1.123456

Эта вещь в фигурных скобках соединит это имя целевого каталога и исходное имя папки.

Редактировать:
Я только что увидел, что ваш целевой каталог должен быть UNC-путем. Robocopy принимает UNC-пути (даже с именами путей длиннее 256 символов). Вам просто нужно заменить (".\datastore\somefolder\" с участием ("\\datastore\somefolder\" в моей команде. Итак, правильная команда будет:

gci C:\results\1319_TC1.* | foreach-object { robocopy $_.fullname ("\\datastore\somefolder\" + $_.name) }

Вы бы сделали это в пакетном файле. Вам понадобится онлайн для каждого каталога.

В качестве альтернативы вы можете сделать это, скопировав все, а затем удалив лишнее, если это проще: Robocopy z: \ directory d: \ directory / MIR / COPYALL (Внимание: MIR предназначен для зеркального отображения и перезапишет все в своем Кстати, используйте только в пустом каталоге).

Вы не сможете сделать это только с помощью Robocopy. Если у вас есть доступ к Linux-машине, было бы тривиально просто использовать find с -exec вариант. Или вы можете использовать cygwin в Windows (я предполагаю, что у него есть команда find), или вы можете использовать язык сценариев, такой как Ruby или Python, в Windows.

Вот такая быстрая оболочка:

$Dir = get-childitem "c:\results\"  -recurse
$List = $Dir | where {$_.FullName -match "1319_TC1."}
$List | split-path FullName -parent | get-unique

Выдает список всех файлов, находящихся в папке, соответствующей «1319_TC1». Тогда все, что тебе нужно сделать robocopy каждая из этих папок.

Сделайте следующее:

for /d %d in (c:\results\1319_TC1.*) do robocopy "%d" "\\datastore\somefolder\%~nxd" /E /W:0 /R:0 /XO /XJ

Здесь мы используем команду Windows for с /d swith, чтобы перебрать все каталоги 1319_TC1.* а команда for будет хранить имя каждого каталога, полный путь c:\results\1319_TC1.* .. по одному в переменной %d.

С помощью %~nxd мы отделяем имя папки и расширение от всего пути и передаем его в robocopy, чтобы гарантировать, что те же папки будут созданы в месте назначения \\datastore\somefolder.

Выбирайте переключатели robocopy на свой вкус.

В for команда позволяет вводить и передавать явные имена другой команде, robocopy в таком случае. Вот пример копирования профилей пользователей john и paul к datastore. Захожу в исходную папку cd c:\users сначала, чтобы указать имена исходных папок без полных имен путей:

cd c:\users
for /d %d in (john,paul) do  robocopy "%d" "\\datastore\somefolder\%d" /E /W:0 /R:0 /XO /XJ

Я знаю, что это ответ на вопрос шестилетней давности, но все предыдущие ответы были пустяками. Поскольку это лучший результат в Google, я подумал, что найду правильное решение для конкретного вопроса.

c:\robocopy "c:\results\1319_TC1.*" "\\datastore\somefolder\"

Вы не можете выбрать несколько исходных каталогов. Однако каталоги являются файлы.

Если у вас есть структура .\folder1\folder3\, .\folder1\folder4, и .\folder2

Правильный синтаксис для копирования папок 3 и 4 в папку 2 с помощью robocopy:

robocopy folder1 folder2 folder* /e

где / e переместит все каталоги.

Вот тут и становится интересно. Чтобы контролировать, какие каталоги копируются, вы не включаете список или подстановочный знак для выбора тех, которые вы хотите скопировать, вы используете / XD и используете список или подстановочный знак, чтобы исключить те, которые вы не хотите копировать.