|
本帖最后由 2011htpcfans 于 2013-10-20 21:17 编辑
个人花了一天编写的,DiskPart分区基本操作与VHD辅助工具,应该能省去大家每次输命令的繁琐和些许时间,不敢独享,拿出来,敬请公测,拍砖,这么简单的东西,行内一看便知,不多说!
RE: DiskPart分区基本操作与VHD辅助工具
开始对论坛规矩不熟,更新后的不在一楼,现在上传更新后的附件,说明:
一、内容变动说明
1、第5项功能更改为卸载vhd虚拟磁盘文件,原功能作用不大。
2、第3项功能不变,但ESP分区格式变为FAT32,并且增设临时盘符P,
减少在Win7、Win8 PE中手动安装系统工作量。实际上UEFI+GPT
安装系统也麻烦不到哪里去,就是一次GPT分区+一次Imagex应用
+一次BcdBoot c:\windows /s p: /f UEFI。c:就是Imagex应用
的盘符,即系统安装的盘符,p:就是刚才提到的ESP分区盘符。
BcdBoot版本需要Win8 X64的,Win7版本的绝定不行。
3、程序结构稍微变动,再次运行任务时能看到功能菜单。
二、程序测试说明
1、近乎完美测试方法:先执行功能4,新建虚拟磁盘文件,挂载
别退出程序,可以直接执行功能1,2,6,最后执行功能5
2、测试中发现问题:刚才执行过程,3跳过了,因为,在Win8
X64系统中,总是提示“没有足够空间完成操作”,执行报错
但你执行了也没关系,然后随便执行1,2,6,5,还是没影响
3、刚才说到功能3,在我的Win7 PE中完美执行,并顺利手动安装
UEFI+GPT Win8 X64;最新我心如水Win8 PE,由于精简掉了DiskPart
没法试验。系统安装需要Win8 X64的BcdBoot。
三、程序典型应用说明
1、协助手动安装UEFI+GPT Win8 X64
PE中先执行功能3,然后看盘符,需要的话,执行功能6(执行完的
结果最好是ESP盘符是P,要安装盘符是C,其它盘符别太乱),然后
一次Imagex应用,最后一次BcdBoot c:\windows /s p: /f UEFI,
就是手动修复引导,搞定!
2、在现有系统环境下安装vhd第二系统
执行功能4,新建虚拟磁盘文件,挂载,假设盘符为G,执行一次功能6,
把ESP分区搞出盘符来,假设为P,然后一次Imagex应用,一次手动
修复引导(如果是UEFI,BcdBoot G:\windows /s p: /f UEFI),
系统这样就安装好了,最后可以执行一次功能5,卸载磁盘文件,
重启进vhd新系统。其实全新硬盘安装vhd系统也很容易的,稍微变下
就行了。
四、其它
1、Win8 X64环境下,执行功能3,提示“没有足够空间完成操作”,请
哪位专家给个权威解释。固定容量vhd磁盘,不支持动态磁盘分区。
2、现有资料关于磁盘分区 ID ,请哪位专家给科普下。
3、在我的机子上,UEFI+GPT与BIOS+MBR相比,自检与引导过程快大约2-3
秒,请问是个例吗?
4、欢迎二次开发编程,欢迎自定制开发编程!
@echo off&mode con lines=25 cols=90
color 0a
setlocal enabledelayedexpansion
title DiskPart分区与vhd创建工具_马宝银倾力提供
::2013年10月20日建议更新,加上如下内容
::加上程序运行密码,防止哪个人乱操作,导致磁盘灾难,密码是当前月份+当前日期
echo.
@echo ------------------------------------------------------------------------------
set /p SecurityCode=*****请输入程序运行密码*****
set /a s=%date:~5,2%+%date:~8,2%
if not !SecurityCode!==!s! (
echo 不好意思,密码错误!直接退出
pause>nul
exit)
::通过在系统盘用户目录试建文件夹,判断是否以管理员身份运行,不是提示,退出!
@echo ------------------------------------------------------------------------------
rd %systemdrive%\users\Dir_Test>nul 2>nul
md %systemdrive%\users\Dir_Test>nul 2>nul||(Echo 请使用右键管理员身份运行&&Pause >nul&&Exit)
rd %systemdrive%\users\Dir_Test>nul 2>nul
::2013年10月20日更新完毕
echo.
echo.
echo.
echo ╔┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╗
echo ┋ ┋
echo ┋ DiskPart分区与vhd创建工具 ┋
echo ┋ ┋
echo ┋ ┋
echo ┋ BY: 马宝银 ┋
echo ┋ 2013-10-18 ┋
echo ┋ ┋
echo ╚┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╝
echo.
pause>null
cls
echo.
@echo ------------------------------------------------------------------------------
@echo 程序运行环境:Win8/7,或者Win8/7的PE,但需支持DiskPart,管理员身份
@echo 程序主要功能:磁盘分区,vhd虚拟磁盘创建,卸载盘符,装载指定盘符
@echo 典型用法示例:全新硬盘装系统,修改(指定)已有盘符CD-6,然后硬盘分区-2
@echo ------------------------------------------------------------------------------
echo.
@echo 注意: 1、请珍惜数据,谨慎操作,最好提前备份数据
@echo 注意: 2、第^<1^>块磁盘从^<0^>开始起编,第^<1^>个分区从^<1^>开始起编
@echo 注意: 3、涉及磁盘与分区选择,使用数字0,1,2,3……,错误输入将灾难!
@echo 注意: 4、磁盘分区容量设置要合理,装Win8_X64,分区容量60G起步
@echo 注意: 5、涉及分区容量输入,单位是M,比如60G,需输入60000
@echo 注意: 6、超过2T容量,建议选择GPT分区方式,ESP、MSR分区默认容量500M
@echo 注意: 7、不要试图输入比磁盘总容量还大的分区容量
@echo 注意: 8、ESP分区对齐需注意,默认偏移1024K,offset搞得定,默认盘符P
@echo 注意: 9、除非特殊需要,建议分区格式为NTFS
@echo 注意:10、逻辑分区,易导致盘符错乱,没有特殊情况,不建议使用
@echo 注意:11、可能已经有光盘、硬盘分区盘符,默认分配可用的盘符,可自定。
@echo 注意:12、目前指定盘符对光盘有效,指定盘符对ESP、MSR应该有效
@echo 注意:13、输入vhd文件名(加路径)示例:e:\backup\x.vhd,不需引号
@echo 注意:14、vhd文件默认固定容量模式,你可以自行修改成动态可变模式
@echo 注意:15、中间产生DiskPart.txt、null文件,自动删除;非正常结束,可手删
pause>null
:opInput
cls
echo ╔┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╗
echo ┋ 程序功能选择 ┋
echo ┋ ┋
echo ┋ 1.将磁盘分成一个MBR活动主分区(如64G SSD,装系统,无MSR) ┋
echo ┋ ┋
echo ┋ 2.将磁盘分成两个MBR主分区,第一分区活动主分区,无MSR ┋
echo ┋ ┋
echo ┋ 3.GPT分区,包含ESP、MSR、60G的第一数据分区和剩余空间分区 ┋
echo ┋ ┋
echo ┋ 4.在某分区中新建vhd虚拟磁盘文件,挂载 ┋
echo ┋ ┋
echo ┋ 5.卸载虚拟磁盘文件(应该少用) ┋
echo ┋ ┋
echo ┋ 6.为卷(某分区)装载指定盘符 ┋
echo ┋ ┋
echo ┋ 7.我是来打酱油的,直接退出 ┋
echo ╚┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉╝
echo ------------------------------------------------------------------------------
set /p op=请输入工作任务类型:1-7----
for /l %%i in (1,1,7) do (
if !op!==%%i (
goto ValidInput)
)
echo 这么简单的选择题都会错,输入数字1-7有这么难吗,请重新输入
echo ------------------------------------------------------------------------------
goto opInput
:ValidInput
if !op!==7 goto End
echo list disk>%~dp0\DiskPart.txt
echo exit>>%~dp0\DiskPart.txt
diskpart /s %~dp0\DiskPart.txt
echo ------------------------------------------------------------------------------
if !op!==1 (
set /p choiceDisk_1=请输入要操作的磁盘编号---
echo select disk !choiceDisk_1!>%~dp0\DiskPart.txt
echo detail disk>>%~dp0\DiskPart.txt
echo exit>>%~dp0\DiskPart.txt
diskpart /s %~dp0\DiskPart.txt
echo select disk !choiceDisk_1!>%~dp0\DiskPart.txt
echo clean>>%~dp0\DiskPart.txt
echo create partition primary>>%~dp0\DiskPart.txt
echo format fs=ntfs quick>>%~dp0\DiskPart.txt
::可在此指定盘符
echo assign>>%~dp0\DiskPart.txt
echo active>>%~dp0\DiskPart.txt
echo exit>>%~dp0\DiskPart.txt
set /p bProceed_1=你选择对磁盘^<!choiceDisk_1!^>进行分区操作,请确认是否继续,是y,非n---
if not !bProceed_1!==y goto End
::可在此加暂停,在本批处理目录查看DiskPart.txt内容,还可手动改盘符,保存后生效
diskpart /s %~dp0\DiskPart.txt
goto End
)
if !op!==2 (
set /p choiceDisk_2=请输入要操作的磁盘编号---
echo select disk !choiceDisk_2!>%~dp0\DiskPart.txt
echo detail disk>>%~dp0\DiskPart.txt
echo exit>>%~dp0\DiskPart.txt
diskpart /s %~dp0\DiskPart.txt
set /p SizePartition_Op2_P1=输入第一个分区容量,剩余所有为第二分区,单位M----
echo select disk !choiceDisk_2!>%~dp0\DiskPart.txt
echo clean>>%~dp0\DiskPart.txt
echo create partition primary size=!SizePartition_Op2_P1!>>%~dp0\DiskPart.txt
echo format fs=ntfs quick>>%~dp0\DiskPart.txt
::可在此预先指定盘符
echo assign>>%~dp0\DiskPart.txt
echo active>>%~dp0\DiskPart.txt
echo create partition primary>>%~dp0\DiskPart.txt
echo format fs=ntfs quick>>%~dp0\DiskPart.txt
::可在此预先指定盘符
echo assign>>%~dp0\DiskPart.txt
echo list partition>>%~dp0\DiskPart.txt
echo exit>>%~dp0\DiskPart.txt
::可在此加暂停,在本批处理目录查看DiskPart.txt内容,还可手动改盘符,保存后生效
set /p bProceed_2=你选择对磁盘^<!choiceDisk_2!^>进行分区操作,请确认是否继续,是y,非n---
if not !bProceed_2!==y goto End
diskpart /s %~dp0\DiskPart.txt
goto End
)
if !op!==3 (
set /p choiceDisk_3=请输入要操作的磁盘编号---
echo select disk !choiceDisk_3!>%~dp0\DiskPart.txt
echo detail disk>>%~dp0\DiskPart.txt
echo exit>>%~dp0\DiskPart.txt
diskpart /s %~dp0\DiskPart.txt
set /p SizePartition_Op3_P3=输入第一数据分区容量,剩余所有为第二数据分区,单位M----
echo select disk !choiceDisk_3!>%~dp0\DiskPart.txt
echo clean>>%~dp0\DiskPart.txt
echo convert gpt>>%~dp0\DiskPart.txt
echo create partition efi size=500 offset=1024>>%~dp0\DiskPart.txt
::为ESP分区指定的临时盘符P,重启盘符失效
echo format fs=fat32 quick>>%~dp0\DiskPart.txt
echo assign letter=p>>%~dp0\DiskPart.txt
echo create partition msr size=500>>%~dp0\DiskPart.txt
echo create partition primary size=!SizePartition_Op3_P3!>>%~dp0\DiskPart.txt
echo format fs=ntfs quick>>%~dp0\DiskPart.txt
::可在此预先指定盘符
echo assign>>%~dp0\DiskPart.txt
echo create partition primary>>%~dp0\DiskPart.txt
echo format fs=ntfs quick>>%~dp0\DiskPart.txt
::可在此预先指定盘符
echo assign>>%~dp0\DiskPart.txt
echo list partition>>%~dp0\DiskPart.txt
echo exit>>%~dp0\DiskPart.txt
::可在此加暂停,在本批处理目录查看DiskPart.txt内容,还可手动改盘符,保存后生效
set /p bProceed_3=你选择对磁盘^<!choiceDisk_3!^>进行分区操作,请确认是否继续,是y,非n---
if not !bProceed_3!==y goto End
diskpart /s %~dp0\DiskPart.txt
goto End
)
if !op!==4 (
set /p fileVhd=请输入要创建的vhd文件名(加完整路径,示例:e:\backup\x.vhd)---
set /p SizePartition_Op4_P1=输入要创建的vhd文件容量,最好固定容量模式,单位M----
echo create vdisk file="!fileVhd!" maximum=!SizePartition_Op4_P1! type=fixed>%~dp0\DiskPart.txt
echo select vdisk file="!fileVhd!">>%~dp0\DiskPart.txt
echo attach vdisk>>%~dp0\DiskPart.txt
::默认偏移量1024K。
echo create part pri offset=1024>>%~dp0\DiskPart.txt
echo format fs=ntfs quick>>%~dp0\DiskPart.txt
::可在此预先指定盘符,为建立引导项打基础,建立引导项应该比较Easy了。
echo assign>>%~dp0\DiskPart.txt
echo list partition>>%~dp0\DiskPart.txt
echo exit>>%~dp0\DiskPart.txt
diskpart /s %~dp0\DiskPart.txt
goto End
)
if !op!==5 (
set /p fileVhd_5=请输入要卸载的vhd文件名(加完整路径,示例:e:\backup\x.vhd)---
echo select vdisk file="!fileVhd_5!">%~dp0\DiskPart.txt
echo detach vdisk>>%~dp0\DiskPart.txt
echo list vol>>%~dp0\DiskPart.txt
echo exit>>%~dp0\DiskPart.txt
diskpart /s %~dp0\DiskPart.txt
goto End
)
if !op!==6 (
:AssignLabel
cls
echo list vol>%~dp0\DiskPart.txt
echo exit>>%~dp0\DiskPart.txt
diskpart /s %~dp0\DiskPart.txt
echo ------------------------------------------------------------------------------
set /p choiceVol_6=请输入要操作的卷编号---
set /p Label=请输入要指定的卷符号(或分区盘符),我不检测无效盘符噢---
echo select vol !choiceVol_6!>%~dp0\DiskPart.txt
::echo detail vol>>%~dp0\DiskPart.txt
::指定盘符
echo assign letter=!Label!>>%~dp0\DiskPart.txt
echo exit>>%~dp0\DiskPart.txt
diskpart /s %~dp0\DiskPart.txt
set /p bProceedA=请问是否继续指定卷符号(或分区盘符),是y,不n---
if !bProceedA!==y goto AssignLabel
)
:End
set /p bProceed=请问是否还有其它任务,是y,不n---
if !bProceed!==y goto opInput
del /f /s /q %~dp0\DiskPart.txt
echo 任务结束! Congratulations!
pause>null
|
评分
-
查看全部评分
|