无忧启动论坛
标题:
VHD系统迁移工具(测试)
[打印本页]
作者:
baby1277
时间:
昨天 10:21
标题:
VHD系统迁移工具(测试)
本帖最后由 baby1277 于 2025-8-25 10:20 编辑
灵感来自
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=447326
原理就是把系统备份为WIM然后再应用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
复制代码
VHD系统迁移.zip
(1.53 KB, 下载次数: 33)
昨天 10:20
上传
点击文件名下载附件
下载积分: 无忧币 -2
作者:
201012121135
时间:
昨天 11:10
谢谢分享
作者:
小灰兔
时间:
昨天 11:24
谢谢分享
作者:
handsome_xiang
时间:
昨天 11:29
感谢分享!
作者:
wn168cn@163.com
时间:
昨天 11:42
感谢楼主分享 !
作者:
蘭蘭
时间:
昨天 14:20
谢谢分享!
作者:
dksoft
时间:
昨天 14:25
学习了解
作者:
wang1126
时间:
昨天 14:35
谢谢楼主分享
作者:
wqsohu
时间:
昨天 14:35
谢谢分享
作者:
wwwlhp
时间:
昨天 14:42
多谢分享!!!
作者:
ok98
时间:
昨天 14:55
老机器有需求
作者:
guong
时间:
昨天 14:58
感谢楼主的分享 !
作者:
ashchen
时间:
昨天 17:35
感谢分享
作者:
481416322
时间:
昨天 18:40
很有创意,等楼主本人测试之后,我一定测试!
欢迎光临 无忧启动论坛 (http://wuyou.net/)
Powered by Discuz! X3.3