Powershell - копирование каталога и файлов из исходной папки в папку назначения - PullRequest
0 голосов
/ 21 января 2020

Я разрабатываю сценарий с помощью PowerShell.

На данный момент я пытаюсь разработать сценарий, в котором у меня есть пакетное задание, которое при успешном выполнении сначала создает папку с датами для этого конкретного дня, а затем создает файл .CSV в. Структура папок выглядит следующим образом.

\\Server\SourceA\Processed\20200120\TestA.CSV

Когда задание будет выполнено на следующий день, оно создаст другую папку и файл, как показано ниже.

\\Server\SourceA\Processed\20200121\TestB.CSV

Так было создано много папок в прошлом.

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

\\Server\SourceA\Processed\

Другая сложная часть - в папке date есть немного других подпапки. Т.е. среди них

\\Server\SourceA\Processed\20191010\Log
\\Server\SourceA\Processed\20191010\Charlie
\\Server\SourceA\Processed\20191010\Alpha
\\Server\SourceA\Processed\20191010\Delta

, мне нужно только читать файлы из папки Log. Следовательно, мой фактический путь к источнику становится следующим:

\\Server\SourceA\Processed\20191010\Log\TestA.CSV

Вот мой сценарий (который сейчас является stati c и не может прочитать прошлые существующие папки с датами).

$fullSourceFileName = "\\Server\SourceA\Processed\"
$date = Get-Date -format "yyyyMMdd"
$fullSourceFileName = "$($fullSourceFileName)$($date)\Log

$destination = "\\Server\DestA\Processed\"
$destination = "$($destination)$($date)\"

get-childitem -path $fullSourceFileName -recurse | copy-item -destination "$($destinationFolder)$($date)\"

Ваша помощь высоко ценится.

1 Ответ

0 голосов
/ 21 января 2020

Я не знал, что могу использовать foreach l oop в Powershell. Итак, вот ответ для чтения всех папок динамической c даты по моему указанному пути. Надеюсь, это поможет сообществу.

$fullSourceFileName = "\\Server\SourceA\Processed\"
$DirToRead = "\Log\"
$dates = Get-ChildItem -Path $fullSourceFileName -Directory
$destination = "\\Server\DestA\Processed\"

foreach ($date in $dates){
        $ActualPath = "$($fullSourceFileName)$($date)$($DirToRead)"
        if(!(Test-Path $ActualPath))
        {
             Write-Output $($ActualPath)$(" source path does not exist")
        }
        else
        {
             get-childitem -path $ActualPath -recurse | copy-item -destination "$($destinationFolder)$($date)\"
        }
        $ActualPath = ""
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...