Каталоги и содержимое Powershell для копирования, имя которых совпадает с фильтром - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь использовать powershell для копирования некоторых каталогов, имена которых совпадают с фильтром.
Прежде всего я удаляю все каталоги, которые совпадают в пути назначения, после чего я пытаюсь скопировать исходные каталоги и содержимое, но у меня есть проблема, потому что копируются только файлы внутри каталогов и подкаталогов, а не имена и структуры каталогов.

$source="F:\origin"
$destination="F:\dest"
$filter="@"

# Remove dirs @ 
Get-ChildItem -Path $destination -Recurse | 
Where-Object { $_.DirectoryName -match $filter } | 
remove-item -Recurse

# Copy dirs and all contents
Get-ChildItem -Path $source -Recurse | 
Where-Object { $_.DirectoryName -match $filter } | 
Copy-Item -Destination $destination

Как я могу это сделать?
Спасибо

EDIT

F: \ происхождения \ @test \ index.php
F: \ происхождение \ @ test1 \ index1.php
F: \ происхождения \ @ test1 \ sub1 \ subindex1.php
F: \ происхождения \ no_consider \ index1.php

Ожидаемый результат

F: \ Dest \ @test \ index.php
F: \ Dest \ @ test1 \ index1.php
F: \ Dest \ @ test1 \ sub1 \ subindex1.php

1 Ответ

0 голосов
/ 06 сентября 2018

пара небольших твиков, кажется, сделали свое дело. заменил некоторые двойные кавычки на одинарные, добавил Recurse в конце одной строки и заменил DirectoryName на Name для первой. Дайте мне знать, если это работает:

$source='c:\origin'
$destination='c:\dest'
$filter="@"

# Remove dirs @ 
Get-ChildItem -Path $destination -Recurse | 
Where-Object { $_.Name -match $filter } | 
remove-item -Recurse


# Copy dirs and all contents
Get-ChildItem -Path $source | 
Where-Object { $_.Name -match $filter } | 
Copy-Item -Destination $destination -Recurse -Force
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...