谢谢分享 |
学习一下,谢谢 |
提示不支持的系统映像 |
谢谢分享 |
感谢分享 |
2013ertert 发表于 2025-3-4 11:05 本地磁盘系统和VHD系统上都可以使用,不用特意在PE系统使用。 双击运行按提示操作既可 |
本帖最后由 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 |
oym2016 发表于 2025-2-27 20:10 是考虑不足,一般这种映像 索引只有1 ver2值读错了也没有关系。 |
事实上,直接用hyperv安装系统得到的Windows系统也是可以用VHD模式启动的。 |
好,方便易用![]() |
感谢分享 |
谢谢分享,不过没有说明可用于哪些系统? |
感谢分享好东东 |
板凳支持 |
沙发 |
本帖最后由 baby1277 于 2025-3-3 13:42 编辑 系统自带的dism命令工具,感觉很拉胯。 低版本不兼容高版本 (Win7PE装不上Win10) 高版本也不兼容低版本 (Win10PE装不上Win7) 安装失败请更换安装环境,建议在Win8系统环境上安装,Win7-W11都可以安装。 |
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.