qj_tzy 发表于 2012-1-23 14:38:06

在win7pe等环境下建立原生和VBOOT驱动的VHD的子VHD的批处理

@ECHO OFF
rem 在win7pe等环境下建立原生和VBOOT驱动的VHD的子VHD的批处理
color 1f
cls
echo 此脚本(批处理)功能:创建win2008r2/win7/2008/vista/2003/xp.vhd的子VHD。
echo 若VHD所在分区是隐藏的,运行前须用bootice等工具将分区改为非隐藏,完成后再隐藏。
echo 创建win2008r2/win7.vhd等原生VHD的子VHD时,须使用diskpart命令,该命令须运行在:
echo winxp/2003/vista/2008/win7/2008r2/win7pe中,不能运行在DOS/xpe/2003pe环境中。
echo 创建win2008/vista/2003/winxp.vhd等vboot驱动的VHD的子VHD时,
echo 可运行在DOS/xpe/2003pe/win7pe、winxp及以上实体系统等以上任一环境中。
echo 但须在VHD所在分区根目录下拷入vboot目录(须使用vboot目录下的命令)。
echo 以上准备就绪后,推荐在win7pe环境中进行。
echo.
echo 按^C中止本脚本运行,否则继续运行本脚本。
pause
echo.
echo 选择要创建子VHD的系统:
echo 1-win8   (原生VHD)
echo 2-win2008r2(原生VHD)
echo 3-win7   (原生VHD)
echo 4-win2008(vboot驱动VHD)
echo 5-winvista (vboot驱动VHD)
echo 6-win2003(vboot驱动VHD)
echo 7-winxp    (vboot驱动VHD)
echo.
set /P sysno=请选择1-7(其他任意键退出):
if "%sysno%"=="1" goto win8
if "%sysno%"=="2" goto win2008r2
if "%sysno%"=="3" goto win7
if "%sysno%"=="4" goto win2008
if "%sysno%"=="5" goto winvista
if "%sysno%"=="6" goto win2003
if "%sysno%"=="7" goto winxp
goto end

:win8
set sysname=win8
set vhddir=\vhd_sys
set mainvhd=win8.vhd
set subvhd=win8_CHILD.vhd
set subvhdbak=win8_CHILD_BAK.vhd
goto notvboot

:win2008r2
set sysname=win2008r2
set vhddir=\vhd_sys
set mainvhd=my_win2008r2.vhd
set subvhd=my_win2008r2_CHILD.vhd
set subvhdbak=my_win2008r2_CHILD_BAK.vhd
goto notvboot

:win7
set sysname=win7
set vhddir=\vhd_sys
set mainvhd=my_win7.vhd
set subvhd=my_win7_CHILD.vhd
set subvhdbak=my_win7_CHILD_BAK.vhd
goto notvboot

:win2008
set sysname=win2008
set vhddir=\vboot_vhd
set mainvhd=win2008.vhd
set subvhd=win2008_child.vhd
set subvhdbak=win2008_child_bak.vhd
goto vboot

:winvista
set sysname=winvista
set vhddir=\vboot_vhd
set mainvhd=winvista.vhd
set subvhd=winvista_child.vhd
set subvhdbak=winvista_child_bak.vhd
goto vboot

:win2003
set sysname=win2003
set vhddir=\vboot_vhd
set mainvhd=win2003.VHD
set subvhd=win2003_child.vhd
set subvhdbak=win2003_child_bak.vhd
goto vboot

:winxp
set sysname=winxp
set vhddir=\vboot_vhd
set mainvhd=winxp.vhd
set subvhd=winxp_child.vhd
set subvhdbak=winxp_child_bak.vhd
goto vboot

:notvboot
set drv=#
for %%b in (c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%b:%vhddir%\%mainvhd% set drv=%%b:
if %drv%==# goto nomainvhd
if exist %drv%%vhddir%\%subvhd% del %drv%%vhddir%\%subvhd%
if exist %drv%%vhddir%\%subvhdbak% del %drv%%vhddir%\%subvhdbak%
echo create vdisk file="%drv%%vhddir%\%subvhd%" parent="%drv%%vhddir%\%mainvhd%" > "%drv%%vhddir%\createmp.txt"
diskpart /s "%drv%%vhddir%\createmp.txt"
del %drv%%vhddir%\createmp.txt
copy %drv%%vhddir%\%subvhd% %drv%%vhddir%\%subvhdbak%
echo.
echo 已成功创建%sysname%系统原生VHD的子VHD!
echo.
pause
goto end

:vboot
set drv=#
for %%b in (c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%b:%vhddir%\%mainvhd% set drv=%%b:
if %drv%==# goto nomainvhd
if exist %drv%%vhddir%\%subvhd% del %drv%%vhddir%\%subvhd%
if exist %drv%%vhddir%\%subvhdbak% del %drv%%vhddir%\%subvhdbak%
%drv%\vboot\tools\x86\vbootctl creatediff %drv%%vhddir%\%subvhd% %drv%%vhddir%\%mainvhd%
copy %drv%%vhddir%\%subvhd% %drv%%vhddir%\%subvhdbak%
echo.
echo 已成功创建%sysname%系统vboot驱动的VHD的子VHD!
echo.
pause
goto end

:nomainvhd
echo.
echo.未找到主VHD文件,按任一键退出......
echo.
pause
goto end

:end
color 0f
cls

ren001 发表于 2012-1-25 20:56:07

试验了 很不错 谢谢

95453818 发表于 2012-1-30 11:09:17

回复 #1 qj_tzy 的帖子

bat处理有点问题哦! 怎么一直找不到vhd

if %drv%==# goto nomainvhd

for %%b in (c d e f g h i j k l m n o p q r s t u v w x y z) do if exist %%b:%vhddir%\%mainvhd% set drv=%%b:

获取不到盘符怎么回事!
vhd的名字到底是什么哦!用win7.vhd 或 my_win7.vhd都不对哦!
一直跳转 到nomainvhd

[ 本帖最后由 95453818 于 2012-1-30 11:12 编辑 ]

qj_tzy 发表于 2012-1-30 11:26:53

回复 #3 95453818 的帖子

vhd的名字(包括所在目录),都要根据自己的情况,对该批处理进行更改。若不更改,当然找不到VHD了。

2012mlinks 发表于 2012-4-11 17:09:50

非常好,谢谢。
图形化工具外,命令式的操作,有时候是必须的。

hai2002713 发表于 2012-5-6 21:18:34

2011xiongdeyuan 发表于 2015-2-9 12:09:18

非常好,谢谢

bfgxp 发表于 2015-2-9 21:36:22

学习了,vboot不开发,可惜了

2011xiongdeyuan 发表于 2015-2-12 19:56:25

vboot不开发?
页: [1]
查看完整版本: 在win7pe等环境下建立原生和VBOOT驱动的VHD的子VHD的批处理