如何用PowerShell脚本在多台机器备份文件夹中保留最新7组.tgz及对应.txt文件
PowerShell脚本实现备份文件保留逻辑
脚本说明
这个脚本会批量处理指定机器的backup文件夹,仅保留最新7份.tgz备份文件及其对应的.txt日志/校验文件,删除其余旧文件,适配多机器批量操作场景。
完整脚本
# 配置要处理的机器列表 $targetMachines = @("A", "B", "C", "D") # 目标文件夹路径模板({0}会被替换为机器名,可根据实际路径修改) $backupFolderTemplate = "\\{0}\c$\backup" foreach ($machine in $targetMachines) { Write-Host "正在处理机器: $machine" -ForegroundColor Cyan # 拼接当前机器的备份文件夹路径 $currentBackupPath = $backupFolderTemplate -f $machine # 检查文件夹是否存在 if (-not (Test-Path -Path $currentBackupPath)) { Write-Warning "机器$machine的备份文件夹不存在: $currentBackupPath" continue } # 获取所有.tgz文件,按最后修改时间降序排序 $tgzFiles = Get-ChildItem -Path $currentBackupPath -Filter "*.tgz" | Sort-Object LastWriteTime -Descending # 若.tgz文件数量≤7,无需清理 if ($tgzFiles.Count -le 7) { Write-Host "机器$machine的.tgz文件数量不足7份,无需清理" -ForegroundColor Green continue } # 筛选出需要删除的.tgz文件(跳过前7个最新文件) $tgzToDelete = $tgzFiles | Select-Object -Skip 7 foreach ($tgzFile in $tgzToDelete) { # 匹配对应的.txt文件名(假设与.tgz文件前缀完全一致) $txtFileName = $tgzFile.BaseName + ".txt" $txtFilePath = Join-Path -Path $currentBackupPath -ChildPath $txtFileName # 删除.tgz文件 Remove-Item -Path $tgzFile.FullName -Force -ErrorAction SilentlyContinue Write-Host "已删除旧备份文件: $($tgzFile.FullName)" -ForegroundColor Yellow # 若对应.txt文件存在,一并删除 if (Test-Path -Path $txtFilePath) { Remove-Item -Path $txtFilePath -Force -ErrorAction SilentlyContinue Write-Host "已删除对应日志文件: $txtFilePath" -ForegroundColor Yellow } } Write-Host "机器$machine的备份文件清理完成`n" -ForegroundColor Green } Write-Host "所有机器处理完毕" -ForegroundColor Cyan
使用说明
- 修改机器列表:将
$targetMachines数组中的机器名替换为你的实际机器名(支持NetBIOS名称或IP地址)。 - 调整文件夹路径:如果
backup文件夹不在目标机器的C盘根目录,修改$backupFolderTemplate的路径,例如改为"\\{0}\d$\backup"。 - 权限要求:运行脚本的账号需拥有目标机器
backup文件夹的读写权限,建议以管理员身份启动PowerShell。 - 测试建议:首次运行前,可将
Remove-Item命令替换为Write-Host "将要删除: $($tgzFile.FullName)",先确认待删除文件是否正确,避免误删。
关键逻辑说明
- 先按
LastWriteTime降序排序.tgz文件,确保最新备份排在最前面。 - 跳过前7个最新文件,剩余的即为需要清理的旧备份。
- 自动匹配同前缀的
.txt文件,保证备份文件与配套日志/校验文件同步删除。
内容的提问来源于stack exchange,提问作者Xue Ying
相关产品推荐
相关产品推荐

