Копирование файлов из нескольких подпапок с помощью powershell - PullRequest
0 голосов
/ 07 февраля 2019

Копировать файл из нескольких подпапок в другую несколько подпапок

пример:

C:\Nani\Code\Relase4\database1\tables
C:\Nani\Code\Relase1\database1\tables
C:\Nani\Code\Relase2\database1\tables
C:\Nani\Code\Relase3\cycle1\database1\tables 
C:\Nani\Code\Relase1\database1.02.tables

У меня есть файлы .sql над всеми папками, и я хочу скопировать в

C\Build\database1\tables

если нет каталога database1 \ tables, я должен его тоже создать,

$sourceFolder  = "C:\Nani\Code"
$targetFolder  = "C\Build"
Get-Childitem $sourceFolder -recurse -filter "*.sql"  -Exclude $exclude | %{
    #If destination folder doesn't exist
    if (!(Test-Path $targetFolder -PathType Container)) {
    #Create destination folder
        New-Item -Path $targetFolder -ItemType Directory -Force
    }
    Copy-Item -Path $_.FullName -Destination $targetFolder -Recurse -force 
}

код выше не создает подпапки в месте назначения,

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Попробуйте, я создаю каждую папку перед копированием в нее файлов.

$sourceFolder  = "C:\Nani\Code"
$targetFolder  = "C:\Build"
$sources = Get-Childitem $sourceFolder -recurse -filter "*.sql"  -Exclude $exclude | Select FullName, DirectoryName
foreach ($source in $sources)
{
    $Releasepath = [regex]::match($source.DirectoryName,'C:\\Nani\\Code\\Release\d').Value
    $split = $Releasepath.Replace("\","\\")
    $targetfolderLeaf = $source.DirectoryName -split $split | select -Last 1
    $targetfolderpath = $targetFolder+$targetfolderLeaf
    if (!(Test-Path $targetfolderpath -PathType Container)) {
    #Create destination folder
        New-Item -Path $targetfolderpath -ItemType Directory -Force
    }
    Copy-Item -Path $source.FullName -Destination $targetfolderpath -Recurse -force 
}
0 голосов
/ 07 февраля 2019

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

Сценарий:

#Keeping all the sources in an array
$Sources = @("C:\Nani\Code\Relase4\database1\tables",
"C:\Nani\Code\Relase1\database1\tables",
"C:\Nani\Code\Relase2\database1\tables",
"C:\Nani\Code\Relase3\cycle1\database1\tables",
"C:\Nani\Code\Relase1\database1.02.tables")

$Destination="C\Build\database1\tables\"

#Iterating each source folder
foreach($source in $sources)
{
#Getting all the sql files under an iteration folder recursively 
$files=Get-ChildItem -Path $source -Filter "*.sql" -Recurse 

    #Iterating all the files underneath a single source folder
    foreach ($file in $files) 
    {
    #Copying the files for a single folder to the destination
    Copy-Item $file.PSPath -Destination  ("$Destination" + ($file.PSParentPath | Split-Path -Leaf) + '_' + $file)
    }
}

Надеюсь, это поможет.

...