|
本帖最后由 oym2016 于 2021-1-19 08:29 编辑
按楼主思路,做了个 手动还原restore.cmd
::父盘=Win81x64.vhdx 差分盘=BaseOS.vhdx
::批处理重复复制 差分盘为二个不同名的子盘 供实际使用文件.
::grub2(ufei)识别不同的标志,启动所对应的磁盘镜像
::子盘1=SubOS_1.vhdx 标志=SubOS.1
::子盘2=SubOS_2.vhdx 标志=SubOS.2
@ECHO off
PUSHD %~dp0
:Start
FOR /F "tokens=*" %%G in ('dir /s /b SubOS.*') DO (goto :revhd)
::第一次无标志时 创建SubOS_1.vhdx 标志=SubOS.1;SubOS_2.vhdx
COPY %~dp0BaseOS.vhdx %~dp0SubOS_1.vhdx >nul
ECHO SubOS_2vhdx >%~dp0SubOS_2.vhdx
ECHO SubOS1 >%~dp0SubOS.1
GOTO :end
:revhd
::获取BaseOS.vhdx SubOS_1.vhdx SubOS_2.vhdx 文件大小
for /f %%i in ('dir /s /b %~dp0BaseOS.vhdx') do (set size_b=%%~zi)
for /f %%i in ('dir /s /b %~dp0SubOS_1.vhdx') do (set size_1=%%~zi)
for /f %%i in ('dir /s /b %~dp0SubOS_2.vhdx') do (set size_2=%%~zi)
IF EXIST %~dp0SubOS.1 (
::如果SubOS_1.vhdx已还原过, 程序退出.
if %size_1% equ %size_b% echo SubOS_1.vhdx Restored OK & TIMEOUT /t 5&exit
DEL /S %~dp0SubOS_2.vhdx >nul
COPY %~dp0BaseOS.vhdx %~dp0SubOS_2.vhdx >nul
ECHO SubOS2 >%~dp0SubOS.2
DEL %~dp0SubOS.1 >nul
) ELSE (
::如果SubOS_2.vhdx已还原过, 程序退出.
if %size_2% equ %size_b% echo SubOS_2.vhdx Restored OK & TIMEOUT /t 5&exit
DEL /S %~dp0SubOS_1.vhdx >nul
COPY %~dp0BaseOS.vhdx %~dp0SubOS_1.vhdx >nul
ECHO SubOS1 >%~dp0SubOS.1
DEL %~dp0SubOS.2 >nul
)
:end
echo SubOS Restored !!!
TIMEOUT /t 5
exit
::grub2菜单
menuentry "Windows 8.1 Vhdx" --class windows {
if search -n -s -f /vhdos/SubOS.1;then
ntboot --efi=/vhdos/bootmgfw.efi --vhd /vhdos/SubOS_1.vhdx
elif
search -n -s -f /vhdos/SubOS.2;then
ntboot --efi=/vhdos/bootmgfw.efi --vhd /vhdos/SubOS_2.vhdx
fi;
}
|
|