Powershell: копирование папок только с одним конкретным дочерним элементом

#powershell #copy-item

#powershell #copy-item

Вопрос:

Я пытаюсь скопировать папку в другое место с помощью powershell только с определенными дочерними элементами формата файла.

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

Итак, я написал эту команду, но она копирует не текстовый файл, а просто пустую папку. Так что в основном -Filter это не работает

 Copy-Item -Path D:PawanGitlabec-alert-service -Filter *.txt -Destination D:PawanGitlabBuildFiles
 

Что я делаю не так?

Комментарии:

1. Вы пробовали добавлять -Recurse ?

2. Попробуйте это: Copy-Item -Path D:PawanGitlabec-alert-service* -Filter *.txt -Destination D:PawanGitlabBuildFiles

3. @GertJanKraaijeveld — он просто скопировал файл, но не папку.

4. @PalleDue — Да. Recurse скопировал все

Ответ №1:

 $splatPrm = @{
    sourceDirectory = "d:tmp01"
    destinationDirectory = "D:tmp02"
    wildCardArray = @("*.txt") # or @("*.txt", "*.csv") or other
}

amp; {
    param(
        [System.IO.DirectoryInfo]$sourceDirectory,
        [System.IO.DirectoryInfo]$destinationDirectory,
        [string[]]$wildCardArray
    )
    $pathToCopy = [System.IO.Path]::Join($destinationDirectory.FullName, $sourceDirectory.Name)
    if (-not [System.IO.Directory]::Exists($pathToCopy)){
        [System.IO.Directory]::CreateDirectory($pathToCopy)
    }
    foreach ($wildCard in $wildCardArray){
        foreach ($file in $sourceDirectory.GetFiles($wildCard)){
            $file.CopyTo([System.IO.Path]::Join($pathToCopy, $file.Name))
        }
    }
} @splatPrm