baby1277 发表于 2025-8-25 10:21:58

VHD系统迁移工具(测试)

本帖最后由 baby1277 于 2025-8-26 09:26 编辑

灵感来自http://bbs.wuyou.net/forum.php?mod=viewthread&tid=447326

原理就是先把系统备份为WIM然后再还原,理论上可行,所以写了这个工具。

仅检查脚本逻辑错误,没有实际测试过,有问题反馈下好后续改进。

@echo off
cd /d %~dp0
title VHD系统迁移工具 baby1277 2025.8.25
for %%i in (Dism wimserv) do if not exist %SystemRoot%\System32\%%i.exe echo.&echo 系统缺少必要的组件,按任意键退出。&pause>nul&exit
set path1=%~dp0
set path2=%path1: =%
if not "%path2%"=="%path1%" cls&echo.&echo 当前路径不能包含空格,按任意键退出。&pause>nul&exit
:xuan
cls
echo.
echo.
echo.
echo.本工具旨在实现VHD系统和物理磁盘系统之间的相向迁移,建议在PE或者非迁移目标的系统上运行。
echo.
echo.
echo.1. VHD系统 迁移到 物理磁盘系统
echo.
echo.
echo.2. 物理磁盘系统 迁移到 VHD系统
echo.
echo.
set /p N=请输入需要对应的数字:
echo.
echo.
if "%N%"=="1" goto xuan0
if "%N%"=="2" goto xuan0
goto xuan
:xuan0
cls
echo.
echo.
if %N% equ 1 echo 选择了 VHD系统 迁移到 物理磁盘系统
if %N% equ 2 echo 选择了 物理磁盘系统 迁移到 VHD系统
echo.
echo.
echo.
echo.输入提示1:VHD文件路径不可以有汉字和特殊符号
echo.
if %N% equ 2 echo.输入提示2:VHD文件位置也可以不输入由脚本自行创建
echo.
set /p vhd=请输入迁移VHD文件的位置:
if %N% equ 2 if not defined vhd set vhd=%cd%\Win_%random:~-2%.vhdx
for /f "delims=" %%i in ('echo %vhd%') do set "dir=%%~di"&if /i not "%%~xi"==".vhd" if /i not "%%~xi"==".vhdx" goto xuan0
set path1=%vhd%
set path2=%path1: =%
if not "%path2%"=="%path1%" cls&echo.&echo 当前路径不能包含空格,按任意键退出。&pause>nul&exit
echo.
echo.
echo.输入提示:物理磁盘位置只要输入一个字母
echo.
echo.
set /p ben=请输入迁移物理磁盘位置:
echo.
echo.
cls
set abc=C D E F G H I J K L M N O P Q R S T X U V W Y Z
if %N% equ 1 if not exist "%vhd%" goto xuan0
if %N% equ 2 if not exist "%vhd%" call :mdvhd
if not exist %ben%: goto xuan0
cls
echo.
echo.
echo.
if %N% equ 1 echo. 由 %vhd% 迁移至 %ben%:\
if %N% equ 2 echo. 由 %ben%:\ 迁移至 %vhd%
echo.
echo.
echo.
echo 请确认以上信息无误后按回车键继续&pause>nul
cls
(echo select vdisk file="%vhd%"&echo detach vdisk)|diskpart >nul 2>nul
for %%i in (%abc%) do if exist %%i: set t%%i=ok
(echo select vdisk file="%vhd%"&echo attach vdisk&echo exit)|diskpart >nul 2>nul
for %%i in (%abc%) do if exist %%i: if not defined t%%i set pan1=%%i:\
call :xuan%N%
call :bcd
cls
echo.
echo.
echo.
if %N% equ 1 echo. 由 %vhd% 迁移至 %ben%:\ 完成,按任意键重启系统。
if %N% equ 2 echo. 由 %ben%:\ 迁移至 %vhd% 完成,按任意键重启系统。
echo.
echo.
echo.
pause>nul
:mdvhd
for %%i in (%abc%) do if not exist %%i: set pan=%%i
(echo create vdisk file="%vhd%" maximum=61440 type=expandable
echo Select vdisk file="%vhd%"
echo attach vdisk
echo create partition primary
echo format quick fs=ntfs label="SYSTEM"
echo assign letter=%pan%:
echo select vdisk file="%vhd%"
echo detach vdisk
echo exit
) | diskpart >nul 2>nul
goto :eof
:xuan1
DISM /Capture-Image /ImageFile:%dir%\temp.wim /CaptureDir:%pan1% /Name:"by_baby1277"
DISM.exe /Apply-Image /ImageFile:%dir%\temp.wim /Index:1 /ApplyDir:%ben%:\
bcdboot %ben%:\Windows /l zh-ch
goto :eof
:xuan2
DISM /Capture-Image /ImageFile:%dir%\temp.wim /CaptureDir:%ben%:\ /Name:"by_baby1277"
Dism /apply-image /imagefile:%dir%\temp.wim /Index:1 /applydir:%pan1%
bcdboot %pan1%Windows /l zh-ch
goto :eof
:bcd
(echo select vdisk file="%vhd%"&echo detach vdisk)|diskpart >nul 2>nul
bcdedit /set {bootmgr} Locale zh-cn
bcdedit /timeout 3
del /f /q %dir%\temp.wim
goto :eof

201012121135 发表于 2025-8-25 11:10:05

谢谢分享

小灰兔 发表于 2025-8-25 11:24:54


谢谢分享

handsome_xiang 发表于 2025-8-25 11:29:34

感谢分享!

dksoft 发表于 2025-8-25 14:25:42

学习了解

wqsohu 发表于 2025-8-25 14:35:51

谢谢分享

wwwlhp 发表于 2025-8-25 14:42:27

多谢分享!!!

ok98 发表于 2025-8-25 14:55:19

老机器有需求

guong 发表于 2025-8-25 14:58:04

感谢楼主的分享 !

ashchen 发表于 2025-8-25 17:35:29

感谢分享

481416322 发表于 2025-8-25 18:40:55

很有创意,等楼主本人测试之后,我一定测试!

sairen139 发表于 2025-8-26 07:00:55

其实最简单的方法用DG的扇区复制,选第三个复制文件选项。

但它对源和目标的分区格式化创建时的字节大小要一样才行,否则复制文件时候会报错。

后面挂载注册表删除C盘那条记录很简单的处理。。。

yesfei 发表于 2025-8-26 07:36:52

这个是迁移到c:分区,还是也可以到d:分区?如果VHD 在E分区。

lbw2007 发表于 2025-8-26 11:05:56

为什么搞这么复杂?我直接ghost磁盘对拷,从来没遇到过问题。

guong 发表于 2025-8-26 13:14:06

lbw2007 发表于 2025-8-26 11:05
为什么搞这么复杂?我直接ghost磁盘对拷,从来没遇到过问题。

没搞过呢

lbw2007 发表于 2025-8-27 12:00:45

guong 发表于 2025-8-26 13:14
没搞过呢

把VHD当做普通系统磁盘挂载、系统迁移就好了。win8以后磁盘驱动器问题搞定,只要迁移以后重新修复引导,一般都不会报错

yidaifengniu 发表于 2025-8-28 16:50:50

学习了,感谢分享

abelll 发表于 2025-9-25 15:08:08


谢谢分享

ashchen 发表于 2025-9-29 07:03:46

继续学习

hook2648 发表于 2025-10-2 21:20:12


谢谢楼主分享

wcg7374 发表于 2025-10-10 22:03:53

谢谢分享

IT小森 发表于 2025-10-13 16:04:23

谢谢分享

zdlzj 发表于 2025-10-15 14:07:18

有人测试了,结果如何

juice220818 发表于 2025-10-15 21:16:20

回头我来试试看

screet 发表于 2026-7-26 10:22:17

谢谢分享

womwom 发表于 2026-7-26 22:51:04

感谢分享

yfnm 发表于 2026-7-27 11:28:18

感谢分享,没用过,下载备用。原来 一直用的DG实盘转vhd,vhd转实盘。
页: [1]
查看完整版本: VHD系统迁移工具(测试)