Как настроить выборочное бекапирование с сохранением пути?
Доброго дня.
Даны следующие условия: есть многоуровневая структура папок, она всегда состоит из определенного количества уровней. Пример: C:/aaa/bbb/ccc/ddd, C:/aaa/bbb1/ccc1/ddd1 и так далее. В каждой папке могут находиться файлы в разном количестве.
Задача - бекапить полный путь, но файлы сохранять только из самой дальней папки, т.е. в случае нашего примера это пятый уровень ddd и ddd1. Прочие файлы не должны попадать в бекап, т.к. не особо важны, но весьма тяжеловесны.
Решение возможно любое, батники и тд, лишь бы работало на практике. Папок много, вручную или отдельными батниками для каждой папки решить не пойдет.
если Windows старый то написать скрипт на WSH, если новый то на PowerShell. Просто ходим рекурсивно по директориям и смотрим, если в директории больше нет директорий то бэкапим её содержимое.
# Если вложенных папок нет, копируем файлы с сохранением структуры
if ($subFolders.Count -eq 0) {
# Получаем относительный путь от базовой папки к текущей
$relativePath = $folderPath.Substring($baseFolder.Length).TrimStart('\')
# Определяем целевую папку для копирования
$targetPath = Join-Path -Path $destination -ChildPath $relativePath
# Создаем целевую папку, если её ещё нет
if (!(Test-Path -Path $targetPath)) {
New-Item -ItemType Directory -Path $targetPath | Out-Null
}
# Копируем все файлы в текущей папке в соответствующую папку в целевом расположении
Write-Host "Копируем файлы из $folderPath в $targetPath"
Get-ChildItem -Path $folderPath -File | ForEach-Object {
Copy-Item -Path $_.FullName -Destination $targetPath -Force
}
} else {
# Если вложенные папки есть, рекурсивно вызываем функцию для каждой из них
foreach ($subFolder in $subFolders) {
Copy-FilesWithStructure -folderPath $subFolder.FullName -baseFolder $baseFolder
}
}
}