无忧启动论坛

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

[分享] 快速安装VHD系统的批处理

[复制链接]
跳转到指定楼层
1#
发表于 2025-2-24 22:05:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 baby1277 于 2025-3-5 14:03 编辑

帮助新手快速安装VHD系统,傻瓜式操作比WinNTSetup更简单。

不需要掌握系统启动和VHD系统相关知识,支持Win7-Win11 32位和64位系统。

只需将系统映像文件拖进来按回车键,把所有繁琐的步骤交给批处理来完成。

简单的测试下没有发现问题,若有问题或者建议跟帖留言。


  1. @echo off
  2. title (快速安装VHD系统 By baby1277 2025.3.5)
  3. :: 拖拽操作支持
  4. set wim=%~1
  5. if defined wim goto wimok
  6. :vhdset
  7. cls&echo.
  8. if defined cuo echo.&echo 安装遇到了问题,不支持的系统映像。&echo.
  9. echo 请将Wim或者Esd映像文件拖拽进来后按回车键
  10. echo.
  11. set /p wim=
  12. :wimok
  13. :: 检查映像文件路径正确性
  14. for /f "delims=" %%i in ('echo %wim%') do (
  15. if /i not "%%~xi"==".wim" if /i not "%%~xi"==".esd" goto vhdset
  16. if not exist "%%~fi" goto vhdset
  17. set wim2=%%~fi
  18. set wimN=%%~ni
  19. )
  20. :: 判断映像文件的系统版本来设置VHD磁盘格式
  21. for /f "tokens=2-4" %%i in ('dism /get-wiminfo /wimfile:"%wim2%"^|find "名称"') do (
  22. if %%j equ 7 set nx=.vhd&goto nxok
  23. if %%j equ 8 set nx=.vhdx&goto nxok
  24. if %%j equ 8.1 set nx=.vhdx&goto nxok
  25. if %%j equ 10 set nx=.vhdx&goto nxok
  26. if %%j equ 11 set nx=.vhdx&goto nxok
  27. echo %%i%%j%%k|find /i "win7">nul&&set nx=.vhd&goto nxok
  28. echo %%i%%j%%k|find /i "windows7">nul&&set nx=.vhd&goto nxok
  29. for %%a in (8 8.1 10 11) do echo "%%i%%j%%k"|find /i "win%%a">nul&&set nx=.vhdx&goto nxok
  30. for %%b in (8 8.1 10 11) do echo "%%i%%j%%k"|find /i "windows%%b">nul&&set nx=.vhdx&goto nxok
  31. )
  32. echo "%wimN%"|find /i "win7">nul&&set nx=.vhd&goto nxok
  33. echo "%wimN%"|find /i "windows7">nul&&set nx=.vhd&goto nxok
  34. for %%i in (8 8.1 10 11) do echo "%wimN%"|find /i "win%%i">nul&&set nx=.vhdx&goto nxok
  35. for %%i in (8 8.1 10 11) do echo "%wimN%"|find /i "windows%%i">nul&&set nx=.vhdx
  36. :nxok
  37. if not defined nx set cuo=0&goto vhdset
  38. :: 设置VHD文件位置
  39. set "vhdPath=%~d0\WinVHD_%random:~-2%%nx%"
  40. :: 获取Wim/Esd映像文件索引
  41. for /f "tokens=1-4" %%i in ('dism /get-wiminfo /wimfile:"%wim2%"') do (
  42. if "%%i"=="索引:" set mod=%%j
  43. if /i "%%l"=="Ultimate" set ver2=旗舰版&goto ver1
  44. if /i "%%l"=="Enterprise" set ver2=企业版&goto ver1
  45. if "%%l"=="企业版" set ver2=企业版&goto ver1
  46. if /i "%%l"=="lot" set ver2=lot企业版&goto ver1
  47. if "%nx%"==".vhdx" if /i "%%l"=="Pro" set ver2=专业版&goto ver1
  48. if "%nx%"==".vhdx" if /i "%%l"=="Professional" set ver2=专业版&goto ver1
  49. if "%nx%"==".vhdx" if "%%l"=="专业版" set ver2=专业版&goto ver1
  50. )
  51. :ver1
  52. if not defined mod set cuo=0&goto vhdset
  53. :: 设置VHD磁盘卷标
  54. set vhdname=WindowsVHD
  55. :: 设置VHD文件大小
  56. set vhdSize=60
  57. set /a vhdSize2=vhdSize*1024
  58. :: 显示Wim/Esd文件系统版本和索引
  59. echo.&echo 映像:%wim2%  支持安装VHD系统的版本&echo.
  60. setlocal enabledelayedexpansion
  61. for /f "skip=4 delims=" %%i in ('dism /get-wiminfo /wimfile:"%wim2%"^|find /i /v "home"^|find /v "家庭"') do (
  62. for /f "delims=" %%a in ('echo %%i^|find "索引"') do set mod3=%%a
  63. for /f "delims=" %%b in ('echo %%i^|find "名称"') do set mod4=%%b
  64. if defined mod4 if "%nx%"==".vhd" echo !mod4!|find /i "pro">nul&&set mod4=
  65. if defined mod4 if "%nx%"==".vhd" echo !mod4!|find "专业版">nul&&set mod4=
  66. if defined mod4 echo !mod3!    !mod4!&set mod3=&set mod4=
  67. )
  68. setlocal disabledelayedexpansion
  69. :: 显示VHD系统安装参数
  70. echo.&echo =================VHD系统参数=================
  71. echo.
  72. echo VHD磁盘卷标:%vhdname%
  73. echo.
  74. echo VHD文件位置:%vhdPath%
  75. echo.
  76. echo VHD文件大小:%vhdSize% GB
  77. echo.
  78. echo Wim/Esd位置:%wim2%
  79. echo.
  80. echo Wim/Esd索引:%mod%  %ver2%
  81. echo.
  82. echo 请确认以上VHD参数没有问题可以直接按回车键继续
  83. echo.
  84. set /p mod2=如需要安装其他版本则输入对应索引号按回车键继续:
  85. if defined mod2 set mod=%mod2%
  86. :: 创建并加载VHD磁盘
  87. for %%i in (R S T U V W Y Z) do if not exist %%i: set pan=%%i
  88. (echo create vdisk file="%vhdPath%" maximum=%vhdSize2% type=expandable&^
  89. echo Select vdisk file="%vhdPath%"&^
  90. echo attach vdisk&^
  91. echo create partition primary&^
  92. echo format quick fs=ntfs label="%vhdname%"&^
  93. echo assign letter=%pan%:&^
  94. echo exit)|diskpart
  95. :: 应用系统镜像到VHD磁盘
  96. dism /apply-image /imagefile:"%wim2%" /index:%mod% /applydir:%pan%:\
  97. :: 配置引导记录
  98. bcdboot %pan%:\Windows /l zh-ch
  99. if %errorlevel% equ 0 set vhdSetup=ok
  100. if not defined vhdSetup goto cuo2
  101. :: 安装成功设置引导程序
  102. bcdedit /timeout 3
  103. bcdedit /set {bootmgr} Locale zh-cn
  104. :: 部署自动应答文件
  105. set yinda=%pan%:\Windows\Panther\unattend.xml
  106. if exist %yinda% goto cuo2
  107. md %pan%:\Windows\Panther
  108. if exist %pan%:\Windows\Syswow64 (set sysbit=amd64) else set sysbit=x86
  109. echo ^<?xml version='1.0' encoding='utf-8'?^>>%yinda%
  110. echo ^<unattend xmlns="urn:schemas-microsoft-com:unattend"^>>>%yinda%
  111. echo     ^<settings pass="oobeSystem"^>>>%yinda%
  112. echo         ^<component name="Microsoft-Windows-Shell-Setup" processorArchitecture="%sysbit%" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"^>>>%yinda%
  113. echo             ^<AutoLogon^>>>%yinda%
  114. echo                 ^<Enabled^>true^</Enabled^>>>%yinda%
  115. echo                 ^<Username^>Administrator^</Username^>>>%yinda%
  116. echo             ^</AutoLogon^>>>%yinda%
  117. echo             ^<OOBE^>>>%yinda%
  118. echo                 ^<SkipMachineOOBE^>true^</SkipMachineOOBE^>>>%yinda%
  119. echo             ^</OOBE^>>>%yinda%
  120. echo         ^</component^>>>%yinda%
  121. echo     ^</settings^>>>%yinda%
  122. echo ^</unattend^>>>%yinda%
  123. :: 安装失败返回
  124. :cuo2
  125. (echo select vdisk file="%vhdPath%"&echo detach vdisk)|diskpart
  126. if defined vhdSetup Shutdown -r -f -t 0&exit
  127. del /f /q "%wim2%"
  128. set cuo=0&goto vhdset
复制代码



快速安装VHD系统20250305.zip (2.27 KB, 下载次数: 96)
2#
 楼主| 发表于 2025-2-24 22:05:40 | 只看该作者
本帖最后由 baby1277 于 2025-3-3 13:42 编辑

系统自带的dism命令工具,感觉很拉胯。
低版本不兼容高版本 (Win7PE装不上Win10)
高版本也不兼容低版本 (Win10PE装不上Win7)
安装失败请更换安装环境,建议在Win8系统环境上安装,Win7-W11都可以安装。
回复

使用道具 举报

3#
发表于 2025-2-24 22:24:03 来自手机 | 只看该作者
沙发
回复

使用道具 举报

4#
发表于 2025-2-24 22:33:40 | 只看该作者
板凳支持
回复

使用道具 举报

5#
发表于 2025-2-24 23:16:06 | 只看该作者
感谢分享好东东
回复

使用道具 举报

6#
发表于 2025-2-26 09:39:33 | 只看该作者
谢谢分享,不过没有说明可用于哪些系统?
回复

使用道具 举报

7#
发表于 2025-2-26 15:07:33 | 只看该作者
感谢分享
回复

使用道具 举报

8#
发表于 2025-2-26 18:40:23 | 只看该作者
好,方便易用
回复

使用道具 举报

9#
发表于 2025-2-27 18:18:35 | 只看该作者
事实上,直接用hyperv安装系统得到的Windows系统也是可以用VHD模式启动的。
回复

使用道具 举报

10#
发表于 2025-2-27 20:10:33 | 只看该作者
索引: 1
名称: Windows 11 IoT 企业版 LTSC
描述: Windows 11 IoT 企业版 LTSC

for /f "tokens=1-5" %%i in (......
if "%%l"=="企业版" set ver2=企业版&goto ver1
if "%%m"=="企业版" set ver2=企业版&goto ver1

点评

是考虑不足,一般这种映像 索引只有1 ver2值读错了也没有关系。  详情 回复 发表于 2025-2-27 22:07
回复

使用道具 举报

11#
 楼主| 发表于 2025-2-27 22:07:21 | 只看该作者
oym2016 发表于 2025-2-27 20:10
索引: 1
名称: Windows 11 IoT 企业版 LTSC
描述: Windows 11 IoT 企业版 LTSC

是考虑不足,一般这种映像 索引只有1    ver2值读错了也没有关系。
回复

使用道具 举报

12#
发表于 2025-3-2 11:16:04 | 只看该作者
本帖最后由 oym2016 于 2025-3-2 17:14 编辑

交deepseek_r1修改,整理:

@echo off
setlocal enabledelayedexpansion
title (快速安装VHD系统 By baby1277 2025.2.26)

:: 检查是否有拖拽文件输入
set "wim=%~1"
if defined wim goto wimok

:vhdset
cls
echo.
echo 请将Wim或Esd映像文件拖拽进来后按回车键
echo.
set /p "wim=请输入文件路径: "
if "!wim!"=="" goto vhdset

:wimok
:: 验证文件扩展名和存在性
for %%i in ("%wim%") do (
    if /i not "%%~xi"==".wim" if /i not "%%~xi"==".esd" (
        echo 错误:仅支持.wim或.esd文件
        goto vhdset
    )
    if not exist "%%~fi" (
        echo 错误:文件不存在
        goto vhdset
    )
    set "wim2=%%~fi"
)


::获取映像索引...
::Dism.exe /get-wiminfo /wimfile:"!wim2!" | more
call :ChoiseIndex !wim2!

:: 解析名称
for /f "tokens=1-6" %%i in ('Dism.exe /get-wiminfo /wimfile:"%wim2%" /index:!index!') do (
   if "%%i"=="名称:" set mod=%%j&set num=%%k&set ver0=%%l&set ver1=%%m&set ver2=%%n
)
set "vhd_title=%mod% %num% %ver0% %ver1% %ver2%"

:: 获取版本信息
for %%v in ("旗舰版=Ultimate" "企业版=Enterprise" "专业版=Professional") do (
    set "pair=%%~v"
    if "!ver0!"=="!pair:~0,3!" set "ver0=!pair:~4!"
    if "!ver1!"=="!pair:~0,3!" set "ver0=!pair:~4!"
)

:: 设置VHD类型
set "nx=.vhdx" & set "mb=gpt"
if %num% leq 7 set "nx=.vhd" & set "mb=mbr"

:: 用户输入VHD位置
:input_drive
echo.
set /p "vhd_d0=请输入存放VHD的盘符(如 C D E): "
if not exist "!vhd_d0!:\" (
    echo 错误:盘符无效
    goto input_drive
)

:: 生成唯一文件名
set "vhd_fn=!mod:~0,3!!num!!ver0:~0,3!"
set "vhd_dir=!vhd_d0!:\!vhd_fn!"
set "vhd_path=!vhd_dir!\!vhd_fn!!nx!"
if exist "!vhd_path!" (
    set "cnt=1"
    :name_check
    set "vhd_path=!vhd_dir!\!vhd_fn!_!cnt!!nx!"
    if exist "!vhd_path!" (set /a cnt+=1 & goto name_check)
)

:: 创建目录
if not exist "!vhd_dir!" mkdir "!vhd_dir!"
:: 设置大小
if "%value%"=="" set "value=32"
set /a size=value*1024

cls
echo.
echo.
echo.
echo ===========请确认VHD参数:
echo.
echo VHD磁盘卷标:!vhd_fn!
echo.
echo VHD文件位置:!vhd_path!
echo.
echo VHD文件大小:%value%GB (最大:%size%MB)
echo.
echo Wim/Esd位置:%wim2%
echo.
echo Wim/Esd卷号:%index%
echo.
echo Wim/Esd名称:%vhd_title%
echo.
echo =====按任意键... 创建虚拟磁盘 (!vhd_path!)
pause>nul
echo.&echo.
:: 创建虚拟磁盘
echo 正在创建VHD...
for %%i in (R S T U V W Y Z) do if not exist %%i: set pan=%%i
echo create vdisk file=%vhd_path% maximum=%size% type=expandable > "%temp%\vhd.txt"
echo attach vdisk >> "%temp%\vhd.txt"
echo select vdisk file=%vhd_path% >> "%temp%\vhd.txt"
echo clean >> "%temp%\vhd.txt"
echo convert %mb% >> "%temp%\vhd.txt"
echo create partition primary >> "%temp%\vhd.txt"
echo format fs=ntfs label="%vhd_fn%" quick >> "%temp%\vhd.txt"
echo assign letter=%pan%: >> "%temp%\vhd.txt"
diskpart /s "%temp%\vhd.txt"

del "%temp%\vhd.txt" >nul 2>&1
echo.&echo.
if exist %pan%:  echo 虚拟磁盘已成功创建并挂载为%pan%:盘 ||echo 创建失败!
pause

cls
:: 应用系统镜像
echo.&echo.
echo 应用系统镜像(%wim2%)到(!vhd_fn!!nx!):
echo.&echo 按任意键继续......&pause>nul
Dism.exe /apply-image /imagefile:"!wim2!" /index:!index! /applydir:!pan!:\

:: 应用应答文件
echo.&echo  添加驱动...按任意键继续......&pause>nul
echo.&echo  注意: 拖拽备份驱动目录回车安装驱动; 直接回车取消安装.
echo.
if not exist "%pan%:\Windows\Panther" md "%pan%:\Windows\Panther"& xcopy /yhie "Unattend.xml" "%pan%:\Windows\Panther\"
set back_Driver="F:\DriversBackup\OnDriver10"
set /p "back_Driver=请输入或拖拽备份驱动目录路径: "
dir !back_Driver! 1>nul 2>nul
if errorlevel 1 goto :vhd_bcd
Dism.exe /Image:%pan%: /Add-Driver /Driver:%back_Driver% /recurse

:: 配置BCD
:vhd_bcd
cls
bcdedit | findstr /i "winload.efi" >nul && (set "ext=efi")||(set "ext=exe")
echo.&echo.
echo ===========请确认BCD 配置参数:
echo.  
echo BCD菜单标题: %vhd_title%
echo.
echo BCD设备文件: [%vhd_path:~0,2%]%vhd_path:~2%
echo.
echo =====按任意键继续......&pause>nul

set "guid={}"
for /f "tokens=2 delims={}" %%g in ('bcdedit /create /d "!vhd_title!" /application osloader') do set "guid={%%g}"
bcdedit /set !guid! device vhd="[!vhd_path:~0,2!]!vhd_path:~2!"
bcdedit /set !guid! osdevice vhd="[!vhd_path:~0,2!]!vhd_path:~2!"
bcdedit /set !guid! path \windows\system32\winload.!ext!
bcdedit /set !guid! systemroot \Windows
bcdedit /displayorder !guid! /addlast
bcdedit /set {bootmgr} Locale zh-cn
bcdedit /set {bootmgr} default !guid!
bcdedit /timeout 3
echo.&echo.
echo 成功完成全部项目!&pause>nul
:: 卸载VHD
(echo select vdisk file="%vhd_path%"&echo detach vdisk)|diskpart
::Shutdown -r -f -t 0
endlocal
exit

:ChoiseIndex
  set maxIndex=1
  for /f "tokens=2 eol=; delims=: " %%i in ('Dism.exe /Get-ImageInfo /ImageFile:!wim2!') do (
    for %%a in (1 2) do (
      if "%%i"=="%%a" set maxIndex=%%i
    )
  )
  if not "!maxIndex!"=="1" (
    @Dism.exe /Get-WimInfo /WimFile:!wim2!
    @echo.
    set /p index=请选择Wim映像的索引:
  ) else (
    set index=1
  )
goto :eof




回复

使用道具 举报

13#
发表于 2025-3-4 11:05:27 | 只看该作者
感谢分享 是不是 在PE环境下 双击 就可以了

点评

本地磁盘系统和VHD系统上都可以使用,不用特意在PE系统使用。 双击运行按提示操作既可  详情 回复 发表于 2025-3-4 11:42
回复

使用道具 举报

14#
 楼主| 发表于 2025-3-4 11:42:49 | 只看该作者
2013ertert 发表于 2025-3-4 11:05
感谢分享 是不是 在PE环境下 双击 就可以了


本地磁盘系统和VHD系统上都可以使用,不用特意在PE系统使用。
双击运行按提示操作既可
回复

使用道具 举报

15#
发表于 2025-3-9 18:08:58 | 只看该作者
感谢分享
回复

使用道具 举报

16#
发表于 2025-3-19 15:13:19 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

17#
发表于 2025-4-1 16:34:44 | 只看该作者
提示不支持的系统映像
回复

使用道具 举报

18#
发表于 3 天前 | 只看该作者
学习一下,谢谢
回复

使用道具 举报

19#
发表于 昨天 10:21 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-4-9 12:09

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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