Передача вывода от get-childitem к robocopy

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

$paths=@()

$srcitems = get-childitem $paths 

robocopy $srcitems $dest /move

Это работает?
Если нет, то как лучше всего передать каждый отдельный элемент в robocopy?

Спасибо
Steeluser


person Animesh    schedule 16.02.2011    source источник


Ответы (4)


           Usage :: ROBOCOPY source destination [file [file]...] [options]

         source :: Source Directory (drive:\path or \\server\share\path).
    destination :: Destination Dir  (drive:\path or \\server\share\path).
           file :: File(s) to copy  (names/wildcards: default is "*.*").

Robocopy ожидает исходный каталог, целевой каталог и спецификацию файла в качестве аргументов. Трудно дать окончательный ответ, не зная, как выглядит ваш «список собранных предметов». Если это исходные каталоги, то вы можете получить этот список через вызов robocopy и жестко закодировать спецификацию подстановочных знаков для имен файлов. Если у вас есть список файлов, вам нужно разделить их на каталог/файл (я бы использовал split-path) и выполнить вызов robocopy для каждого исходного каталога, указав список файлов в этом каталог.

person mjolinor    schedule 16.02.2011
comment
Большое спасибо, mjolinor, ваше предложение помогло мне создать хороший рабочий скрипт для моей работы. - person Animesh; 24.03.2011

Аналогичный сценарий, публикация на случай, если это поможет:

Мне нужно было скопировать (переместить) некоторые папки, начинающиеся с «Пятница» и элементы внутри из источника в пункт назначения, и я придумал это, которое, похоже, работает:

Get-ChildItem T:\ParentFolder -Filter "Friday*" -Name | ForEach-Object { robocopy "T:\ParentFolder\$_" "E:\$_" /z /s /MOVE }
  • В части «Get-ChildItem» перечислены имена папок (-Name), начинающиеся с «Friday» (-Filter «Friday*»).
  • Это передается в ForEach-Object, где robocopy будет выполняться для каждого найденного экземпляра.
  • Аргумент robocopy /MOVE, очевидно, перемещает папки/файлы.

Я новичок в Powershell; не уверен, что есть лучший способ. Скрипт все еще работает, но пока все хорошо.

@walid2mi использует Move-Item, который, я уверен, работает; Мне просто нравится robocopy, потому что у него есть перезапускаемый режим (/Z).

person SPSherm    schedule 22.09.2011

Синтаксис, который работал для меня:

$srcPath = "C:\somefolder"
$dstPath = "C:\someOtherFolder"
$srcitems = get-childitem $srcPath #whatever condition

$srcitems | Select Name | ForEach-Object {robocopy $srcPath $dstPath $_.name}

(что очевидно согласно документации robocopy)

person dognose    schedule 25.10.2016

robocopy

Get-ChildItem $paths | Move-Item -Destination $dest  -WhatIf
person walid2mi    schedule 16.02.2011