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

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

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

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

Пример текстового файла: 1e03655b-0aac-48b2-82f3-75942084af7a.txt

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

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

Спасибо


person strange_things_happen    schedule 31.07.2014    source источник


Ответы (1)


Вы хотите расширить свойства 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}}
person TheMadTechnician    schedule 31.07.2014
comment
Спасибо за ваш быстрый ответ. Это не работает для меня. Нет ошибок. - person strange_things_happen; 01.08.2014
comment
Это потому, что провайдер файловой системы туп как коробка с камнями. Я изменил -Include на -Filter, и теперь он работает. - person TheMadTechnician; 01.08.2014
comment
Я до сих пор не могу заставить его работать. На этот раз ошибка - Copy-Item: A positional parameter cannot be found that accepts argument '..\..\passed_directory\Images\'. - person strange_things_happen; 01.08.2014
comment
Извините, я перепечатал это вместо копирования/вставки и, очевидно, потолстел. У меня был - в команде «Копировать-элемент — $_.FullName $destination» перед исходным путем, который его испортил. С этим удаленным он работает. Очень сожалею об этом. - person TheMadTechnician; 01.08.2014
comment
Хорошо, он копирует каталоги, но не содержимое. - person strange_things_happen; 01.08.2014
comment
Вы ничего не сказали о копировании файлов. В папках есть файлы? Добавьте -Recurse в конец команды Copy-Item. - person TheMadTechnician; 01.08.2014
comment
Да, извини, мой плохой. Да, у меня это работает с рекурсией. Я все еще получаю ошибки, хотя, похоже, не могу найти источник. Но он делает то, что мне нужно, несмотря на ошибку. - person strange_things_happen; 01.08.2014
comment
Если вы хотите обновить свой вопрос с кодом, который вы используете, и в чем ошибка, я посмотрю, что смогу выяснить. Кроме того, всегда есть -ErrorAction SilentlyContinue - person TheMadTechnician; 01.08.2014
comment
Все в порядке, моя вина снова. Все работает, как и ожидалось. Отлично, спасибо. - person strange_things_happen; 01.08.2014