Копирование файлов конкретного типа из рекурсивно вложенных папок c помощью скрипта Powershell

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

$folders = [IO.Directory]::GetDirectories("S:\other","*","AllDirectories")

Foreach ($dir in $folders) {
    Copy-Item -Path $dir -Filter *.txt -Recurse -Destination 'D:\FinishFolder'
}

Проблема в том, что он копирует все вложенные папки на пути к нужному файлу. Как я могу этого избежать?


Ответы (1 шт):

Автор решения: Aleksey Bokaty

Сделать еще один Foreach внутри вашего и перебирать в каждой папке файлы и уже нужные копировать.

$folders = Get-ChildItem "S:\other" -Recurse | Where-Object mode -like 'd*'

Foreach ($dir in $folders) {
    Get-ChildItem  $dir.FullName | ForEach-Object {
        if ($_.name -like '*.txt') {
            Copy-Item $_ -Destination D:\FinishFolder
        } 
    }
}

Простите, за код в лоб, не умею изящно программировать.

→ Ссылка