У меня есть структура исходных папок, как показано ниже
c:\TestResults
|-- Log
| |-- xyz.pdf
| `-- Reports
| `-- rp.pdf
|-- Keywords
| |-- key.txt
| | `-- pb.ea
| `-- reports
|-- Test
| |-- 11.pdf
| |-- 12
| `-- Log
| |-- h1.pdf
| `-- Reports
| `-- h2.pdf
`-- Dev
|-- st
|-- ea
`-- Log
`-- Reports
`-- h4.pdf
Мне нужно скопировать все папки «Log», сохраняя структуру папок. Путь назначения: «c: \ Work \ Logs \ TestResults». Результирующая структура должна быть такой, как показано ниже.
c:\Work\Logs\TestResults
|-- Log
| |-- xyz.pdf
| `-- Reports
| `-- rp.pdf
|-- Test
| `-- Log
| |-- h1.pdf
| `-- Reports
| `-- h2.pdf
`-- Dev
`-- Log
`-- Reports
`-- h4.pdf
Есть ли простой способ добиться этого с помощью сценария powershell? Спасибо!
Редактировать: Вот код, который я написал до сих пор. Это выравнивает структуру папок, но не поддерживает иерархию. Я новичок в скриптах PowerShell. Пожалуйста, помогите.
$baseDir = "c:\TestResults"
$outputDir = "c:\Work\Logs"
$outputLogsDir = $outputDir + "\TestResults"
$nameToFind = "Log"
$paths = Get-ChildItem $baseDir -Recurse | Where-Object { $_.PSIsContainer -and $_.Name.EndsWith($nameToFind)}
if(!(test-path $outputLogsDir))
{
New-Item -ItemType Directory -Force -Path $outputLogsDir
}
foreach($path in $paths)
{
$sourcePath = $path.FullName + "\*"
Get-ChildItem -Path $sourcePath | Copy-Item -Destination $outputLogsDir -Recurse -Container
}