Powershell: копирование файлов из нескольких папок, созданных за x дней при сохранении структуры папок - PullRequest
0 голосов
/ 03 июля 2018

У меня проблемы с поддержанием структуры папок во время копирования Powershell с использованием циклов FOREACH , поскольку некоторые папки в родительской папке нуждаются в данных, созданных более 90 дней назад, тогда как другие 180.

$Folders_90Days = "C:\Admin\Ripley","C:\Admin\Android","C:\Admin\Bishop"
$Folders_180Days = "C:\Admin\Archer","C:\Admin\Figgis","C:\Admin\Pam"
$Dest = 'D:\Archive_Target'

FOREACH($path in $Folders_90Days){
$files = (Get-ChildItem $path | Where-Object { $_.CreationTime -lt (Get-Date).AddDays(-90)})

ForEACH($file in $Files){
Copy-Item $file.FullName -destination $Dest -Recurse
}
#End ForEach Folders_90Days loop
}

Когда выполняется копирование, данные, скопированные из исходных папок, копируются непосредственно в целевой каталог.
По сути, данные в Ripley копируются непосредственно в Archive_Target.

Как я могу заставить его копировать, когда исходная папка становится целевой папкой?
Пример:
D:\Archive_Target\Ripley
- Все время поддерживая структуру папок Source Ripley?

1 Ответ

0 голосов
/ 03 июля 2018

Я создал функцию, которая делает это точно без xcopy.

Я поместил его в рабочий процесс, который позволяет параллельную обработку.

Используя Regex, я получаю папку, которая является основой для источника. Если пути нет, создайте его, иначе настоящее мясо находится в трубе. Получите все элементы в источнике, передайте их, если они старше, чем AgeInDays, затем скопируйте элемент и его контейнер, который позволяет файловой структуре сохранить то же самое.

workflow Copy-ItemBasedOnCreation{
    Param(
        [string[]]$Sources,
        [string]$Desination,
        [int]$AgeInDays
    )

    foreach –parallel ($Source in $Sources){
        $FixedDesination = "$($Desination)$($Source -replace '.*\\')"
        if(!(Test-Path -Path $FixedDesination)){
            md $FixedDesination
        }
        Get-ChildItem  $Source -Recurse | ?{(($_.CreationTime).Day -gt $AgeInDays)} | Copy-Item -Destination $FixedDesination -Recurse -Container
    }
}

Copy-ItemBasedOnCreation -Sources @("C:\Users\Default\Desktop\Source\TEST1","C:\Users\Default\Desktop\Source\TEST2") -Desination "C:\Users\Default\Desktop\Destination\" -AgeInDays 90
Copy-ItemBasedOnCreation -Sources @("C:\Users\Default\Desktop\Source\TEST4","C:\Users\Default\Desktop\Source\TEST5") -Desination "C:\Users\Default\Desktop\Destination\" -AgeInDays 180
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...