Копировать файлы из структуры каталогов, но исключить именованную папку - PullRequest
5 голосов
/ 08 февраля 2012

Я хочу скопировать файлы из структуры каталогов в новую папку. Я не ищу, чтобы сохранить файловую структуру, просто получить файлы. Структура файла такова, что могут быть вложенные папки, но что-либо в папке с именем «old», я не хочу перемещать.

Я сделал пару попыток, но мои знания PowerShell очень ограничены.

Пример того, где существует текущая файловая структура:

Get-ChildItem -Path "C:\Example\*" -include "*.txt -Recurse |% {Copy-Item $_.fullname "C:\Destination\"}

Это дает мне все файлы, которые я хочу, включая все файлы, которые я не хочу. Я не хочу включать какие-либо файлы, которые находятся в «старой» папке. Обратите внимание: существует несколько «старых» папок. Я попытался -exclude, но похоже, что это относится только к имени файла, и я не уверен, как -exclude для пути, при этом копируя файлы.

Любая помощь?

Ответы [ 2 ]

6 голосов
/ 08 февраля 2012

Как насчет этого:

C:\Example*" -include "*.txt -Recurse |
  ?{$_.fullname -notmatch '\\old\\'}|
    % {Copy-Item $_.fullname "C:\Destination\"}

Исключить все, что имеет "\ old \" где-либо на своем пути.

4 голосов
/ 08 февраля 2012

Если мы немного пробьемся в трубопровод, я думаю, вы получите то, что ищете. Каждый объект со свойством с именем Directory (System.IO.FileInfo) со свойством с именем Name со значением old не будет передан в Copy-Item.

Get-ChildItem -Path "C:\Example*" -include *.txt -Recurse | ? {-not ($_.Directory.Name -eq "old")} |  % {Copy-Item $_.fullname "C:\Destination\"}

(непроверенные)

...