无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 497|回复: 15
打印 上一主题 下一主题

[原创] VHD系统迁移工具(测试)

[复制链接]
跳转到指定楼层
1#
发表于 昨天 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 baby1277 于 2025-8-25 10:20 编辑

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

原理就是把系统备份为WIM然后再应用WIM,我也感觉可行,所以写了这个工具。

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

  1. @echo off
  2. cd /d %~dp0
  3. title VHD系统迁移工具 baby1277 2025.8.25
  4. for %%i in (Dism wimserv) do if not exist %SystemRoot%\System32\%%i.exe echo.&echo 系统缺少必要的组件,按任意键退出。&pause>nul&exit
  5. set path1=%~dp0
  6. set path2=%path1: =%
  7. if not "%path2%"=="%path1%" cls&echo.&echo 当前路径不能包含空格,按任意键退出。&pause>nul&exit
  8. :xuan
  9. cls
  10. echo.
  11. echo.
  12. echo.
  13. echo.本工具旨在实现VHD系统和物理磁盘系统之间的相向迁移,建议在PE或者非迁移目标的系统上运行。
  14. echo.
  15. echo.
  16. echo.1. VHD系统 迁移到 物理磁盘系统
  17. echo.
  18. echo.
  19. echo.2. 物理磁盘系统 迁移到 VHD系统
  20. echo.
  21. echo.
  22. set /p N=请输入需要对应的数字:
  23. echo.
  24. echo.
  25. if "%N%"=="1" goto xuan0
  26. if "%N%"=="2" goto xuan0
  27. goto xuan
  28. :xuan0
  29. cls
  30. echo.
  31. echo.
  32. if %N% equ 1 echo 选择了 VHD系统 迁移到 物理磁盘系统
  33. if %N% equ 2 echo 选择了 物理磁盘系统 迁移到 VHD系统
  34. echo.
  35. echo.
  36. echo.
  37. echo.输入提示1:VHD文件路径不可以有汉字和特殊符号
  38. echo.
  39. if %N% equ 2 echo.输入提示2:VHD文件位置也可以不输入由脚本自行创建
  40. echo.
  41. set /p vhd=请输入迁移VHD文件的位置:
  42. if %N% equ 2 if not defined vhd set vhd=%cd%\Win_%random:~-2%.vhdx
  43. for /f "delims=" %%i in ('echo %vhd%') do set "dir=%%~di"&if /i not "%%~xi"==".vhd" if /i not "%%~xi"==".vhdx" goto xuan0
  44. set path1=%vhd%
  45. set path2=%path1: =%
  46. if not "%path2%"=="%path1%" cls&echo.&echo 当前路径不能包含空格,按任意键退出。&pause>nul&exit
  47. echo.
  48. echo.
  49. echo.输入提示:物理磁盘位置只要输入一个字母
  50. echo.
  51. echo.
  52. set /p ben=请输入迁移物理磁盘位置:
  53. echo.
  54. echo.
  55. cls
  56. 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
  57. if %N% equ 1 if not exist "%vhd%" goto xuan0
  58. if %N% equ 2 if not exist "%vhd%" call :mdvhd
  59. if not exist %ben%: goto xuan0
  60. cls
  61. echo.
  62. echo.
  63. echo.
  64. if %N% equ 1 echo. 由 %vhd% 迁移至 %ben%:\
  65. if %N% equ 2 echo. 由 %ben%:\ 迁移至 %vhd%
  66. echo.
  67. echo.
  68. echo.
  69. echo 请确认以上信息无误后按回车键继续&pause>nul
  70. cls
  71. (echo select vdisk file="%vhd%"&echo detach vdisk)|diskpart >nul 2>nul
  72. for %%i in (%abc%) do if exist %%i: set t%%i=ok
  73. (echo select vdisk file="%vhd%"&echo attach vdisk&echo exit)|diskpart >nul 2>nul
  74. for %%i in (%abc%) do if exist %%i: if not defined t%%i set pan1=%%i:\
  75. call :xuan%N%
  76. call :bcd
  77. cls
  78. echo.
  79. echo.
  80. echo.
  81. if %N% equ 1 echo. 由 %vhd% 迁移至 %ben%:\ 完成,按任意键重启系统。
  82. if %N% equ 2 echo. 由 %ben%:\ 迁移至 %vhd% 完成,按任意键重启系统。
  83. echo.
  84. echo.
  85. echo.
  86. pause>nul
  87. :mdvhd
  88. for %%i in (%abc%) do if not exist %%i: set pan=%%i
  89. (echo create vdisk file="%vhd%" maximum=61440 type=expandable
  90. echo Select vdisk file="%vhd%"
  91. echo attach vdisk
  92. echo create partition primary
  93. echo format quick fs=ntfs label="SYSTEM"
  94. echo assign letter=%pan%:
  95. echo select vdisk file="%vhd%"
  96. echo detach vdisk
  97. echo exit
  98. ) | diskpart >nul 2>nul
  99. goto :eof
  100. :xuan1
  101. DISM /Capture-Image /ImageFile:%dir%\temp.wim /CaptureDir:%pan1% /Name:"by_baby1277"
  102. DISM.exe /Apply-Image /ImageFile:%dir%\temp.wim /Index:1 /ApplyDir:%ben%:\
  103. bcdboot %ben%:\Windows /l zh-ch
  104. goto :eof
  105. :xuan2
  106. DISM /Capture-Image /ImageFile:%dir%\temp.wim /CaptureDir:%ben%:\ /Name:"by_baby1277"
  107. Dism /apply-image /imagefile:%dir%\temp.wim /Index:1 /applydir:%pan1%
  108. bcdboot %pan1%Windows /l zh-ch
  109. goto :eof
  110. :bcd
  111. (echo select vdisk file="%vhd%"&echo detach vdisk)|diskpart >nul 2>nul
  112. bcdedit /set {bootmgr} Locale zh-cn
  113. bcdedit /timeout 3
  114. del /f /q %dir%\temp.wim
  115. goto :eof
复制代码
VHD系统迁移.zip (1.53 KB, 下载次数: 34)
2#
发表于 昨天 11:10 | 只看该作者
谢谢分享
回复

使用道具 举报

3#
发表于 昨天 11:24 | 只看该作者

谢谢分享
回复

使用道具 举报

4#
发表于 昨天 11:29 | 只看该作者
感谢分享!
回复

使用道具 举报

5#
发表于 昨天 11:42 | 只看该作者
感谢楼主分享 !
回复

使用道具 举报

6#
发表于 昨天 14:20 | 只看该作者
谢谢分享!
回复

使用道具 举报

7#
发表于 昨天 14:25 | 只看该作者
学习了解
回复

使用道具 举报

8#
发表于 昨天 14:35 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

9#
发表于 昨天 14:35 | 只看该作者
谢谢分享
回复

使用道具 举报

10#
发表于 昨天 14:42 | 只看该作者
多谢分享!!!
回复

使用道具 举报

11#
发表于 昨天 14:55 来自手机 | 只看该作者
老机器有需求
回复

使用道具 举报

12#
发表于 昨天 14:58 | 只看该作者
感谢楼主的分享 !
回复

使用道具 举报

13#
发表于 昨天 17:35 | 只看该作者
感谢分享
回复

使用道具 举报

14#
发表于 昨天 18:40 | 只看该作者
很有创意,等楼主本人测试之后,我一定测试!
回复

使用道具 举报

15#
发表于 半小时前 | 只看该作者
其实最简单的方法用DG的扇区复制,选第三个复制文件选项。

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

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

使用道具 举报

16#
发表于 3 分钟前 | 只看该作者
这个是迁移到c:分区,还是也可以到d:分区?如果VHD 在E分区。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-8-26 07:39

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表