PowerShell批量文件备份脚本

代码脚本 · 备份同步

自动备份指定目录到目标位置,支持增量备份、压缩、保留天数、日志记录,可配合任务计划定时执行。

详细内容

# PowerShell批量文件备份脚本 # 使用方法: .\backup.ps1 -SourcePath "C:\重要文件" -BackupPath "D:\备份" param( [string]$SourcePath = "C:\Users\$env:USERNAME\Documents", [string]$BackupPath = "D:\Backup", [int]$RetentionDays = 30, [switch]$Compress ) # 创建备份目录 $timestamp = Get-Date -Format "yyyyMMdd_HHmmss" $backupDir = Join-Path $BackupPath "backup_$timestamp" New-Item -ItemType Directory -Path $backupDir -Force | Out-Null # 日志文件 $logFile = Join-Path $BackupPath "backup_$(Get-Date -Format 'yyyyMMdd').log" function Write-Log { param([string]$Message, [string]$Level = "INFO") $logEntry = "[$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')] [$Level] $Message" Add-Content -Path $logFile -Value $logEntry -Encoding UTF8 Write-Host $logEntry } Write-Log "========================================" Write-Log "开始备份任务" Write-Log "源目录: $SourcePath" Write-Log "目标目录: $backupDir" Write-Log "========================================" # 检查源目录 if (-not (Test-Path $SourcePath)) { Write-Log "源目录不存在: $SourcePath" "ERROR" exit 1 } # 统计文件 $files = Get-ChildItem -Path $SourcePath -Recurse -File -ErrorAction SilentlyContinue $totalSize = ($files | Measure-Object Length -Sum).Sum Write-Log "待备份文件数: $($files.Count),总大小: $([math]::Round($totalSize/1MB, 2)) MB" # 执行备份 if ($Compress) { # 压缩备份 $zipPath = Join-Path $BackupPath "backup_$timestamp.zip" Write-Log "正在压缩备份..." Compress-Archive -Path "$SourcePath\*" -DestinationPath $zipPath -Force $zipSize = (Get-Item $zipPath).Length Write-Log "压缩完成: $zipPath ($[math]::Round($zipSize/1MB, 2)) MB" } else { # 直接复制 Write-Log "正在复制文件..." Copy-Item -Path $SourcePath -Destination $backupDir -Recurse -Force Write-Log "复制完成" } # 清理过期备份 Write-Log "清理${RetentionDays}天前的备份..." Get-ChildItem -Path $BackupPath -Directory -Filter "backup_*" | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$RetentionDays) } | ForEach-Object { Remove-Item $_.FullName -Recurse -Force Write-Log "已删除过期备份: $($_.Name)" } # 同时清理过期压缩包 Get-ChildItem -Path $BackupPath -Filter "backup_*.zip" | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$RetentionDays) } | ForEach-Object { Remove-Item $_.FullName -Force Write-Log "已删除过期压缩包: $($_.Name)" } Write-Log "========================================" Write-Log "备份任务完成!" Write-Log "========================================" # ========== 定时任务配置 ========== # 每天凌晨2点自动备份: # schtasks /create /tn "每日备份" /tr "powershell -File C:\Scripts\backup.ps1" /sc daily /st 02:00
备份PowerShell增量压缩定时任务

更多备份同步