Передача вывода из get-childitem в robocopy - PullRequest
0 голосов
/ 16 февраля 2011

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

$paths=@()

$srcitems = get-childitem $paths 

robocopy $srcitems $dest /move

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

Спасибо
Steeluser

Ответы [ 4 ]

2 голосов
/ 16 февраля 2011
           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 ожидает в качестве аргументов исходный каталог, целевой каталог и спецификацию файла.Трудно дать однозначный ответ, не зная, как выглядит ваш «список собранных предметов».Если это исходные каталоги, то вы можете получить доступ к этому списку с помощью робокопии и жестко закодировать спецификацию подстановочного знака для имен файлов.Если у вас есть список файлов, вам нужно разделить их на каталог / файл (я бы использовал split-path) и выполнить вызов robocopy для каждого исходного каталога, указав список файлов в этом файле.каталог.

2 голосов
/ 22 сентября 2011

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

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

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

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

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

1 голос
/ 25 октября 2016

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

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

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

(что очевидно в документации по робокопии)

0 голосов
/ 16 февраля 2011

Робокопия

Get-ChildItem $paths | Move-Item -Destination $dest  -WhatIf
...