|
|
本帖最后由 sairen139 于 2026-5-15 08:41 编辑
用完即走的还原卷影副本的批处理如下:
@echo off
setlocal enabledelayedexpansion
:: WinPE兼容性处理:确保reg命令可用
set "RegCmd=reg.exe"
if not exist "%SystemRoot%\System32\reg.exe" (
echo.
echo 警告: 未找到reg.exe
echo.
pause
exit /b 1
)
:: 查询当前的ProductType值
set "OriginalProductType="
for /f "skip=2 tokens=3" %%a in ('%RegCmd% query "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v ProductType 2^>nul') do (
set "OriginalProductType=%%a"
)
:: 如果查询失败(键值不存在),设置默认值
if not defined OriginalProductType (
set "OriginalProductType=WinNT"
)
:: 如果不是ServerNT,则修改为ServerNT
if /i not "!OriginalProductType!"=="ServerNT" (
%RegCmd% add "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v ProductType /d ServerNT /f >nul 2>&1
)
:Menu
cls
echo.
echo. 卷影副本列表如下请输入行号数字还原系统【或者直接按一个盘符英文字母键创建对应盘的卷影备份】
echo.
echo. 由大到小按需输入
echo.
set /a id_cnt=0, vol_cnt=0, time_cnt=0
for /f "delims=" %%a in ('vssadmin list shadows 2^>nul') do (
set "line=%%a"
if "!line:卷影副本 ID:=!" neq "!line!" (
set /a id_cnt+=1
for /f "tokens=3" %%b in ("!line!") do set "shadowid_!id_cnt!=%%b"
)
if "!line:原始卷:=!" neq "!line!" (
set /a vol_cnt+=1
for /f "tokens=2 delims=()" %%c in ("!line!") do set "vol_!vol_cnt!=%%c"
)
if "!line:在创建时间:=!" neq "!line!" (
set /a time_cnt+=1
for /f "tokens=2,3" %%d in ("!line!") do set "time_!time_cnt!=%%d %%e"
)
)
:: 如果没有卷影副本,跳转到直接创建模式
if %id_cnt% equ 0 (
echo 检索不到卷影,将直接进入创建卷影模式。
goto :CreateOnly
)
set /a total=%id_cnt%
for /l %%i in (1,1,%total%) do echo [%%i] 卷影副本 ID: !shadowid_%%i! 原始卷(!vol_%%i!) !time_%%i!
set /p V=请输入行号数字进行卷影还原【或按英文键创建对应盘卷影备份,如 C 或D 或E】:
:: ====== 按一个英文盘符字母创建对应盘的卷影备份 ======
:: 去除输入中的空格
set "V=!V: =!"
:: 检查是否为单个字母
if not "!V!"=="" if "!V:~1!"=="" (
set "alphabet=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if /i not "!alphabet:%V%=!"=="!alphabet!" (
echo.
echo 正在创建 !V!: 盘卷影副本,请稍候...
vssadmin create shadow /for=!V!:
goto Menu
)
)
:: =================================================
if /i "%V%"=="0" goto Done
set "valid=0"
for /l %%i in (1,1,%total%) do if "%V%"=="%%i" set "valid=1"
if "!valid!"=="0" (echo 请输列表里的行号数字&goto Menu)
echo.
echo. 按 Y 键还原目标分区所有文件和注册表,按 N 键不进行
echo.
vssadmin revert shadow /shadow=!shadowid_%V%!
echo.
echo 系统将在 9 秒后自动重启,按 Y 键取消,按 N 键立即重启...
choice /c YN /t 9 /d N /m "按 Y 取消重启,超时或按 N 则自动重启"
if errorlevel 2 (
echo 即将自动重启...
Wpeutil Reboot
) else (
echo 自动重启已取消,返回卷影列表...
goto Menu
)
:Done
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions" /v ProductType /d !OriginalProductType! /f >nul 2>&1
endlocal
pause
exit /b
:: ====== 无卷影时直接创建卷影的处理段(排除 X 盘) ======
:CreateOnly
echo.
set /p DriveLetter=请直接输入要创建卷影的盘符英文字母(如 C 或 D 或 E):
set "DriveLetter=!DriveLetter: =!"
if "!DriveLetter!"=="" goto CreateOnly
if not "!DriveLetter:~1!"=="" (
echo 只能输入单个英文字母
goto CreateOnly
)
:: 排除 X 盘(WinPE 的 RAM 盘)
if /i "!DriveLetter!"=="X" (
echo.
echo X 系统盘通常为 WinPE 临时内存盘,不支持创建卷影备份,请换一个盘符。
goto CreateOnly
)
set "alphabet=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
if /i "!alphabet:%DriveLetter%=!"=="!alphabet!" (
echo 无效的盘符,请输入 A-Z 之间的英文字母。
goto CreateOnly
)
echo 正在创建 !DriveLetter!: 盘卷影副本,请稍候...
vssadmin create shadow /for=!DriveLetter!:
goto Menu
|
|