Копировать каталоги, если их имена совпадают, например, txt-файлы.

StackOverflow https://stackoverflow.com//questions/25069404

Вопрос

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

Это то, что я сделал, и не могу понять, как это исправить.Я хожу по кругу.

$destination = "..\..\$args\Images\"
$txtfiles = Get-ChildItem $destination -Include *.txt
$source = "..\..\..\Images\" | ?{ $_.PSIsContainer } | Where-Object { $_.Name -Like "*$txtfiles*" } | Copy-Item $destination

Пример txt-файла: 1e03655b-0aac-48b2-82f3-75942084af7a.txt

и папка: name.1e03655b-0aac-48b2-82f3-75942084af7a

Поэтому мне нужно найти папки, соответствующие txt-файлам, и скопировать папку в каталог txt-файлов.

Спасибо

Это было полезно?

Решение

Вы хотите расширить свойства BaseName этих текстовых файлов (чтобы отрезать часть .txt) и получить массив строк, например:

1e03655b-0aac-48b2-82f3-75942084af7a
1e03655b-0aac-48b2-82f3-75942084af7b
1e03655b-0aac-48b2-82f3-75942084af8g
1e03655b-0aac-48b2-82f3-75942084afba

Тогда ваш $source = строка должна вытащить список каталогов, а не просто передать строку по конвейеру, а затем я бы предложил сопоставить имена каталогов с регулярным выражением и проверить, является ли это совпадение -in $txtfiles.

$destination = "..\..\$args\Images\"
$txtfiles = Get-ChildItem $destination -Filter *.txt | Select -ExpandProperty BaseName
$source = "..\..\..\Images\"
GCI $source -Directory | ?{ $_.Name -match "(\w{8}-\w{4}-\w{4}-\w{4}-\w{12})$" } | %{If($Matches[1] -in $txtfiles){Copy-Item $_.FullName $destination}}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top