本文目录导读:

- 场景一:批量还原 SQL 数据库备份(.bak 文件)
- 场景二:批量恢复文件到历史版本(如 Git / SVN)
- 场景三:批量恢复系统快照或虚拟机快照
- 场景四:批量恢复文件从备份存储(如 Rsync / Robocopy)
- 核心限制与建议
“实用脚本”这个说法比较宽泛,具体能否批量还原,取决于你指的“还原”是什么场景。
以下分几个最常见的需求场景来说明,并给出对应的脚本示例或思路:
批量还原 SQL 数据库备份(.bak 文件)
如果你有一批 .bak 文件,想批量还原到 SQL Server(最典型的批量还原需求)。
可行方案:使用 PowerShell 脚本或 批处理 (.bat) 调用 sqlcmd。
核心逻辑:遍历文件夹下的所有 .bak 文件,为每个文件生成 RESTORE DATABASE 命令。
示例脚本(PowerShell,适用于 SQL Server):
# 设置参数
$instanceName = "localhost" # SQL 实例名
$backupFolder = "C:\Backups\" # 备份文件存放目录
$dataFileFolder = "D:\Data\" # 数据库数据文件目标路径
$logFileFolder = "D:\Logs\" # 日志文件目标路径
# 遍历所有 .bak 文件
Get-ChildItem -Path $backupFolder -Filter *.bak | ForEach-Object {
$backupFile = $_.FullName
$dbName = $_.BaseName # 假设文件名就是数据库名 ( MyDB.bak -> MyDB)
Write-Host "正在还原数据库: $dbName" -ForegroundColor Green
# 生成 RESTORE DATABASE 命令 (使用 REPLACE, RECOVERY, MOVE 处理路径)
$restoreScript = @"
RESTORE DATABASE [$dbName]
FROM DISK = N'$backupFile'
WITH FILE = 1,
MOVE N'$($dbName)_Data' TO N'$dataFileFolder$($dbName).mdf', -- 需要先确认逻辑文件名
MOVE N'$($dbName)_Log' TO N'$logFileFolder$($dbName)_log.ldf',
REPLACE, RECOVERY, STATS = 10;
"@
# 执行还原 (使用 sqlcmd)
sqlcmd -S $instanceName -Q $restoreScript
if ($?) {
Write-Host "$dbName 还原成功" -ForegroundColor Green
} else {
Write-Host "$dbName 还原失败" -ForegroundColor Red
}
}
注意:你需要提前用 RESTORE FILELISTONLY 确认每个 bak 文件内部的逻辑文件名,否则可能失败,对于异构备份(如不同实例),调整 MOVE 路径即可。
批量恢复文件到历史版本(如 Git / SVN)
如果你指的是代码版本控制的还原,脚本可以做到:
- Git 批量还原指定文件:比如想一次性还原所有被修改过的文件到最新版本。
git checkout -- .
- Git 批量还原到指定提交日期:
# 将整个仓库还原到 7 天前的状态 git checkout `git rev-list -n 1 --before="7 days ago" main`
- SVN 批量还原:
# 递归还原所有更改 svn revert -R .
批量恢复系统快照或虚拟机快照
如果你指的是 VMware / Hyper-V 或 系统快照:
- VMware PowerCLI:
# 批量还原所有名为 "BeforeUpdate" 的快照 Get-VM -Name "WebServer*" | Get-Snapshot -Name "BeforeUpdate" | Restore-Snapshot -Confirm:$false
- Hyper-V:
Get-VM | Get-VMSnapshot | Where { $_.Name -eq "Checkpoint1" } | Restore-VMSnapshot - Windows 系统还原点(不太适合批量,但可以用脚本触发):
# 恢复最近的一个系统还原点 Get-ComputerRestorePoint | Sort-Object -Property CreationTime -Descending | Select -First 1 | Restore-Computer
批量恢复文件从备份存储(如 Rsync / Robocopy)
如果你有冷备份文件,想批量恢复所有缺失的或损坏的文件:
-
Robocopy(Windows):
robocopy \\backup-server\share\Backup C:\OriginalFiles *.* /mir /r:3 /w:5
这个命令会强制将目标文件夹(C:\OriginalFiles)镜像为备份中的状态(相当于批量还原)。
-
rsync(Linux):
rsync -avP /mnt/backup/folder/ /original/folder/
同样是批量覆盖。
核心限制与建议
- 依赖具体工具:实用脚本本质上是调用底层命令(sqlcmd、git、robocopy、rsync、PowerCLI),是否能批量还原取决于你工具的命令行支持程度。
- 先测试:批量还原有破坏性(覆盖数据),务必先用
-WhatIf(PowerShell)、--dry-run(rsync)或在小范围测试环境试运行。 - 确认一致性:如果是数据库备份,批量还原时,数据库实例的资源(内存、磁盘I/O)可能成为瓶颈,可能需要增加延时。
如果你能告诉我具体是什么“实用脚本”或什么“还原”场景(批量还原Word文档到修改前版本、批量还原手机照片、批量还原MySQL数据库等),我可以给出更精确的代码示例。