Я ищу решение использовать 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 и используете список или подстановочный знак, чтобы исключить те, которые вы не хотите копировать.