::选择磁盘
:input_drive
echo.&set /p "vhd_fd=请输入存放VHD的盘符(如 C D E ...): "
set "vhd_fd=%vhd_fd::=%"
if not exist "!vhd_fd!:\" (
echo 错误:盘符无效
timeout /t 2 >nul
goto input_drive
)
::设置名称
:input_name
echo.&echo 字样:仅供复制粘贴("旗舰版=Ultimate" "企业版=Enterprise" "专业版=Professional")
set vhd_fnx=Win10Pro.vhdx
echo.&set /p "vhd_fnx=输入VHD名称和扩展名(默认: Win10Pro.vhdx) "
set "vhd_fnx=%vhd_fnx: =%"
for %%a in ("%vhd_fnx%") do (
set "vhd_fx=%%~xa"
set "vhd_fp=%%~na"
)
if /i not "%vhd_fx%"==".vhd" if /i not "%vhd_fx%"==".vhdx" (
echo 错误:仅支持.vhd或.vhdx文件
goto :input_name
)
::唯一名称
set vhd_dir=!vhd_fd!:\!vhd_fp!
set "vhd_path=!vhd_dir!\!%vhd_fnx!"
set "vhd_path=%vhd_path: =%"
if exist "!vhd_path!" (
set "cnt=1"
:name_check
set "vhd_path=!vhd_dir!\!vhd_fp!_!cnt!!vhd_fx!"
if exist "!vhd_path!" (set /a cnt+=1 & goto name_check)
)
if not exist "%vhd_dir%" md "%vhd_dir%"
::设置格式及大小
:size
set type=expandable
if /i "%vhd_fx%" == ".vhdx" (
set mb=gpt
)else (
set mb=mbr
)
if "%value%"=="" set "value=32"
echo.&set /p "value=设置(!vhd_fnx!)容量大小(默认:32G) "
set /a mx=value*1024
echo %value%|findstr /r "^[0-9]*$" >nul || (echo 无效数字&goto :size)
echo.&echo VHD磁盘参数如下:
echo.&echo 创建动态磁盘:"!vhd_path!"
echo.&echo 磁盘容量: %value% GB (%mx% MB)
echo.&pause
cls
::创建和执行diskpat脚本
for %%i in (R S T U V W Y Z A B C D E F G H I J K L M N O P Q) do (
if not exist %%i:\ (
set "pan=%%i"
goto :assign_vhd
)
)
:assign_vhd
echo create vdisk file="%vhd_path%" maximum=%mx% type=%type% > "%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_fp%" 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 VHD成功创建并挂载为!pan!:盘
) else (
echo VHD挂载失败,请检查diskpart输出!
pause
exit /b 1
)
echo.&pause
:ChoiseIndex
setlocal enabledelayedexpansion
set "wim_file=%~1"
set index=1
set count=0
echo 正在获取镜像信息...
for /f "tokens=2 delims=: " %%i in ('Dism /Get-ImageInfo /ImageFile:"!wim_file!" ^| findstr /i "索引"') do (
set /a count+=1
set "index_list=!index_list! %%i"
echo 索引 %%i
)
if !count! gtr 1 (
echo.
set /p "index=请选择镜像的索引(1-!count!):"
) else (
set index=1
)
endlocal & set index=%index%
goto :eof