无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 9564|回复: 30
打印 上一主题 下一主题

[分享] 开源了,一套基于gdisk的UD三分区一键制作cmd终结版,拿去编程吧!

    [复制链接]
跳转到指定楼层
1#
发表于 2016-8-5 11:25:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zds1210 于 2016-8-16 00:43 编辑

警告:本脚本采用了多方软件,配合上的原因,有可能误伤到硬盘和U盘数据区,请小心操作。
可能问题:
1因gdisk磁盘编号方式比较另类,三个软件配合上,可能会误伤到硬盘。
2bootice切换数据区与efi区,有可能会失败,导致U盘数据区被清空。
测试PE:以下网址的手工文件夹中,下载iso和fba,改名替换winpe目录下的相应文件。 http://pan.baidu.com/s/1o6hXk1O

UD三分区U盘启动一键制作很火。原来已经推出一套基于分区助手命令行的脚本,这次推出基于gdisk的cmd脚本。有兴趣的拿去编程吧。
主要工具:gdisk+fbinst+bootice+7z
原理和主要改进:
UD三分区=左端UD区+中间ntfs格式激活的数据区data+右端的fat16隐藏的efi区
以前基于分区工具gdisk的命令行,要根据U盘大小和UD区和efi区大小,反算出数据区大小。这次在群友和之帮助下,成功改进,自定义UD区和EFI区大小,剩下的就是数据区大小,很人性化啊。
gdisk分区支持从U盘未分配空间的左端 或右端创建指定大小的分区,如果不指定分区大小占据全部空间;而不支持偏移位置创建分区。如果先建立UD区,gdisk认为是左端未分配空间,再创建空间就破坏UD区。所以,从U+后UD法是比较合理的。有群友方案是:先创制右端指定大小的efi区,然后再创制指定大小的数据区,左端剩下的未分配空间用fbinst非强格就成UD区。但这方案要反算 出数据data区,很不人性。
本法,先把U盘分区全部删除,从右端创建指定大小的efi区;然后再创建指定的大小的空间给UD区(不格式化,只是占据UD区的空间),然后不指定大小创建数据区data(中间剩下的就是数据区);
把左端的占位分区删除,然后用fbinst脚本不指定UD扩展分区大小非强格式化一次,左端的未分区空间就变成了UD区。
这个时候,你可以发现efi区是可见的,用7z命令行把efi.iso文件解压进efi区;然后用bootice切换为data区可见。
然后把UD.fba用fbinst写入UD区。
编程制作要点:
1关于防止误伤硬盘的问题:
gdisk磁盘编号和分区编号,从1开始,如 1 2 3 4 5……;而bootice和fbinst的磁盘编号和分区编号都是从o开始,如 0 1 2 3 4 5……
在本脚本中,是用fbinst plus脚本列取并获得U盘编号(为安全不列硬盘),gdisk的U盘编号应该是在这个基本上加1。但考虑到各种复杂情况,理论上有仍可能误伤硬盘。
实际编程中,编程应该用gdisk列有所有硬盘分区编号,然后和fbinstU盘编号加1作对比排除,这样子就可以万无一失,不会误伤到硬盘。
cmd脚本太弱,就不智能处理了。
2U盘左端的未分配空间,只指定UD主分区大小,不指定扩展分区大小,用fbinst非强格一次,就可以无损数据区和efi区格式化为UD区。这个发现我在无损制作中已经提及。
3bootice切换来切换去,到底哪个是efi区和data区。这次发现有一个分区表顺序强制按物理分区顺序排序的脚本,解决了这个问题。
但是无损升级PE时候,bootice切换efi区可见,理论上有可能失败,编程者还是要想办法判断清楚切换后可见区是否一定是efi区 ,以免误清空U盘数据区数据。
4制作U盘启动,U盘占用始终是一个问题。貌似chkdsk  g:  /x 下可以解决一点,不清楚效果大不大。
制作界面:





今天就写到这,以后有时间慢慢优化脚本,详细说清楚制作流程。下了,电脑研究多了,老婆在骂。
为方便非会员用户使用,附上cmd源码:
1全新制作UD三分区脚本
  1. <p>@echo off
  2. COLOR 2F
  3. rem 基于fbinst+gdisk+bootice的UD三分区制作脚本
  4. rem 如果计算机仅安装1块固定磁盘和一个U盘,则finst和bootice的U盘编号为1,gdiskU盘编号为2
  5. rem 本批处理旨在剖释 U盘UD三区 制作的原理,让普通用户也可以自主的进行U盘UD三区部署。
  6. rem 注意:全新制作时,U盘上所有数据将会全部丢失!!!
  7. echo.
  8. echo 基于fbinst+gdisk+bootice的UD三分区制作脚本</p><p>
  9. rem 变量说明: %uid%—用于fbinst和bootice的U盘磁盘编号  %uidg%—用于gdisk的U盘磁盘编号  %udri%—U盘盘符
  10. rem 中间文件说明 .\bin\uds.txt-U盘磁盘编号查看文件,用于判断U盘磁盘编号和盘符 </p><p>
  11. echo.
  12. echo  列出指定电脑上所有U盘
  13. .\bin\fbinst --hdlist "" --USB --REMOVABLE
  14. .\bin\fbinst --hdlist "" --USB --REMOVABLE >.\bin\uds.txt

  15. Echo.
  16. echo 智能查找U盘磁盘编号,多个U盘时候选择最后一个。
  17. Set uid=&&Set uidg=
  18. for %%j in (1 2 3 4 5 6 7 8 9 10 11 12) DO (find  /i "hd%%j" .\bin\uds.txt>nul&&SET uid=%%j)
  19. if not defined uid echo 找不到U盘,无法制作自动退出!!!!&&pause&&del .\bin\uds.txt /q&&goto EX
  20. echo 你的U盘磁盘编号为%uid%
  21. if %uid%==1 set uidg=2
  22. if %uid%==2 set uidg=3
  23. if %uid%==3 set uidg=4
  24. if %uid%==4 set uidg=5
  25. if %uid%==5 set uidg=6
  26. if %uid%==6 set uidg=7
  27. echo.
  28. echo 你的U盘安全分区的磁盘编号为%uidg%(一般为上面的磁盘编号加1,搞错会误操作到硬盘!)
  29. echo 再次核对你的U盘安全分区的磁盘编号与下列信息是否一致,不一致会误操作到硬盘。
  30. .\bin\gdisk32.exe /STATUS
  31. rem 以下语句用gdisk列出所有硬盘磁盘编号,编程者应该提取所有编号,排除 %uidg%=硬盘编号 的情况,以免误伤硬盘
  32. rem .\bin\gdisk32.exe /STATUS /nousb

  33. :U盘盘符不能用于gdisk命令行,主要用于复制文件到U盘efi区
  34. Echo.
  35. echo 智能查找U盘所在盘符
  36. Set udri=
  37. for %%i 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 (find  /i "%%i:" .\bin\uds.txt>nul&&SET udri=%%i)
  38. if not defined udri echo 找不到U盘盘符,无法制作自动退出&&pause&&del .\bin\uds.txt /q&&goto EX
  39. echo 你的U盘所在盘符为%udri%盘(注意搞错会误操作到硬盘!)
  40. del .\bin\uds.txt /q

  41. :还原U盘上的空间,以免U盘二次制作失败!
  42. Echo.
  43. echo  还原U盘为普通U盘,增加制作的可靠性,所有U盘数据丢失,请备份U盘数据!!!
  44. pause
  45. echo on
  46. .\bin\fbinst.exe (hd%uid%) format --force --raw --fat32  --align
  47. @echo off

  48. echo.
  49. echo 删除U盘上的所有分区
  50. .\bin\gdisk32.exe %uidg% /del /all /y

  51. :创建380M的U+高端隐藏区,并设置卷标为efi
  52. echo.
  53. echo 创建380M的高端efi区
  54. .\bin\gdisk32.exe %uidg% /cre /pri /sz:380 /for /q /v:EFI /NTFAT16 /END  /y

  55. :创建500M的左端分区,占位用于UD区
  56. echo.
  57. echo 创建500M的UD区</p><p>rem .\bin\gdisk32.exe 2 /cre /pri /sz:500 /y
  58. .\bin\gdisk32.exe %uidg% /cre /pri /sz:500 /y

  59. :创建数据区
  60. echo.
  61. echo 创建数据区
  62. .\bin\gdisk32.exe %uidg% /cre /pri /for /NTFS /q /v:data  /y

  63. :删除UD分区,注意gdisk的磁盘分区编号为1 2 3 4 5……
  64. .\bin\gdisk32.exe  %uidg% /del /p:1  /y

  65. :格式化UD分区,注意左端的未分配空间用fbinst非强格就可以变成UD区,故UD扩展分区不要指定
  66. rem .\bin\fbinst.exe (hd%uid%)  format  --fat32 --zip --chs --primary 8M  --align
  67. .\bin\fbinst.exe (hd%uid%)  format  --fat32  --primary 8M  --align

  68. :激活data分区
  69. .\bin\gdisk32.exe %uidg% /act /p:1

  70. echo.
  71. echo UD三分区已经成功建立!

  72. :因这个时候efi区是可见的,用7z解压iso复制到EFI区
  73. echo.
  74. echo 正在把efi.iso文件写入EFI区,请稍候……
  75. .\bin\7z.exe x .\winpe\efi.iso -y -aos -o"%udri%:"
  76. if exist %udri%:\[boot] rd %udri%:\[boot] /s /q


  77. :分区表项按物理顺序排序,从而切换data为可见区
  78. .\bin\bootice.exe /DEVICE=%uid% /partitions /firstpart=0

  79. echo.
  80. echo  正在把ud.fba写入UD区,请稍候……
  81. .\bin\fbinst.exe (hd%uid%) load .\winpe\ud.fba

  82. echo.
  83. echo UD三分区PE部署成功!用佛大的qemu虚拟机测试一下bios/uefi双启吧!
  84. pause</p><p>
  85. goto ex

  86. :EX
  87. @echo on</p></p>
复制代码

2免格升级PE
  1. @echo off
  2. COLOR 2F
  3. rem 免格升级时候,不会破坏你U盘原有数据区的文件,只更新UD区和efi区文件。
  4. rem 免格升级时候,主要用于fbinst bootice和7z命令行

  5. echo.
  6. echo 免格升级UD三分区脚本!

  7. rem 变量说明: %uid%—用于fbinst和bootice的U盘磁盘编号  %udri%—U盘盘符
  8. rem 中间文件说明 .\bin\uds.txt-U盘磁盘编号查看文件,用于判断U盘磁盘编号和盘符



  9. echo.
  10. echo  列出指定电脑上所有U盘
  11. .\bin\fbinst --hdlist "" --USB --REMOVABLE
  12. rem del .\bin\uds.txt /q >nul
  13. .\bin\fbinst --hdlist "" --USB --REMOVABLE >.\bin\uds.txt

  14. Echo.
  15. echo 智能查找U盘磁盘编号,多个U盘时候选择最后一个。
  16. Set uid=
  17. for %%j in (1 2 3 4 5 6 7 8 9 10 11 12) DO (find  /i "hd%%j" .\bin\uds.txt>nul&&SET uid=%%j)
  18. echo 你的U盘磁盘编号为%uid%

  19. Echo.
  20. echo 智能查找U盘所在盘符
  21. Set udri=
  22. for %%i 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 (find  /i "%%i:" .\bin\uds.txt>nul&&SET udri=%%i)
  23. if not defined udri echo 找不到U盘盘符,无法制作自动退出&&pause&&del .\bin\uds.txt /q&&goto EX
  24. echo 你的U盘所在盘符为%udri%盘(注意搞错会误操作到硬盘!)
  25. del .\bin\uds.txt /q
  26. pause

  27. :分区表项按物理顺序排序,从而强制切换data为可见区,以防切换分区出错
  28. .\bin\bootice.exe /DEVICE=%uid% /partitions /firstpart=0

  29. :切换efi区为可见区,这里efi区分区代码为2,实际情况要用bootice查看下
  30. .\bin\bootice.exe /DEVICE=%uid% /partitions /firstpart=2

  31. Echo.
  32. echo 正在清空UD区,并把新的UD.fba文件写入UD区,请稍候……
  33. .\bin\fbinst.exe (hd%uid%) clear
  34. .\bin\fbinst.exe (hd%uid%) load .\winpe\ud.fba

  35. :因这个时候efi区是可见的,用7z解压iso复制到EFI区
  36. :编程者要考虑切换efi区失败的问题,最好判断一下有没有efi目录,有就是efi区
  37. echo.
  38. echo 正在清空efi区,并把新的efi.iso文件写入EFI区,请稍候……
  39. echo 确认%udri%盘是EFI区,如果是数据区请退出,以免误删除U盘数据!
  40. pause
  41. del %udri%:*.* /f /a /q
  42. rd %udri%: /s /q
  43. .\bin\7z.exe x .\winpe\efi.iso -y -aos -o"%udri%:"
  44. if exist %udri%:\[boot] rd %udri%:\[boot] /s /q

  45. echo.
  46. echo 切换data区为可见!
  47. :分区表项按物理顺序排序,从而切换data为可见区
  48. .\bin\bootice.exe /DEVICE=%uid% /partitions /firstpart=0

  49. echo.
  50. echo 已经成功免格升级UD三分区PE!用佛大的qemu虚拟机测试一下bios/uefi双启吧!
  51. pause

  52. goto ex

  53. :EX
  54. @echo on
复制代码


3还原U盘
  1. @echo off
  2. COLOR 2F
  3. rem 还有UD三分区启动U盘到普通盘。所有U盘数据丢失!

  4. echo.
  5. echo 还有UD三分区启动U盘到普通盘脚本!

  6. rem 变量说明: %uid%—用于fbinst和bootice的U盘磁盘编号   %udri%—U盘盘符
  7. rem 中间文件说明 .\bin\uds.txt-U盘磁盘编号查看文件,用于判断U盘磁盘编号和盘符

  8. echo.
  9. echo  列出指定电脑上所有U盘
  10. .\bin\fbinst --hdlist "" --USB --REMOVABLE
  11. .\bin\fbinst --hdlist "" --USB --REMOVABLE >.\bin\uds.txt

  12. Echo.
  13. echo 智能查找U盘磁盘编号,多个U盘时候选择最后一个。
  14. Set uid=&&Set uidg=
  15. for %%j in (1 2 3 4 5 6 7 8 9 10 11 12) DO (find  /i "hd%%j" .\bin\uds.txt>nul&&SET uid=%%j)
  16. echo 你的U盘磁盘编号为%uid%


  17. :U盘盘符不能用于gdisk命令行,主要用于复制文件到U盘efi区
  18. Echo.
  19. echo 智能查找U盘所在盘符
  20. Set udri=
  21. for %%i 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 (find  /i "%%i:" .\bin\uds.txt>nul&&SET udri=%%i)
  22. if not defined udri echo 找不到U盘盘符,无法制作自动退出&&pause&&del .\bin\uds.txt /q&&goto EX
  23. echo 你的U盘所在盘符为%udri%盘(注意搞错会误操作到硬盘!)
  24. del .\bin\uds.txt /q

  25. rem 强制卸载并查看磁盘错误,解决U盘占用,以增强全新还原U盘的可靠性
  26. echo.&&echo 强制卸载并查看磁盘错误,以增强全新还原U盘的可靠性&&chkdsk %udri%: /x
  27. Echo.
  28. echo  还原U盘为普通U盘,增加制作的可靠性,所有U盘数据丢失,请备份U盘数据!!!
  29. pause
  30. echo on
  31. .\bin\fbinst.exe (hd%uid%) format --force --raw --fat32  --align
  32. @echo off

  33. goto ex

  34. :EX
  35. @echo on
复制代码

基于gdisk的UD三分区制作脚本3f5版 .7z

2.16 MB, 下载次数: 314, 下载积分: 无忧币 -2

手工提醒防误伤硬盘终结版

评分

参与人数 13无忧币 +61 收起 理由
maomihuacha + 1
helloman + 5 很给力!
lbw2007 + 5 赞一个!
hero8000 + 5 赞一个!
20116339 + 5 赞一个!
eleme + 5 很给力!
zhxy9804 + 5 赞一个!
2010simonzhang + 5 很给力!
wimesd + 5 赞一个!
lsc1117 + 5 赞一个!
逆水獨舟 + 5 赞一个!
ferdfg + 5 赞一个!
zlgs + 5 赞一个!

查看全部评分

2#
 楼主| 发表于 2016-8-5 13:01:23 | 只看该作者
警告:本脚本采用了多方软件,配合上的原因,有可能误伤到硬盘和U盘数据区,请小心操作。目前仍为测试版。
回复

使用道具 举报

3#
发表于 2016-8-5 19:32:00 | 只看该作者
就冲着这好人品也要支持楼主继续开发
回复

使用道具 举报

4#
发表于 2016-8-5 21:50:20 | 只看该作者
谢谢,你总是走在前面!!
回复

使用道具 举报

5#
发表于 2016-8-5 21:50:26 | 只看该作者
谢谢,你总是走在前面!!

点评

gdisk法的三分区早有人用了。只是人家保密。我得到资料后,改进后,与大家共享。  详情 回复 发表于 2016-8-5 21:52
回复

使用道具 举报

6#
 楼主| 发表于 2016-8-5 21:52:32 | 只看该作者
devilma 发表于 2016-8-5 21:50
谢谢,你总是走在前面!!

gdisk法的三分区早有人用了。只是人家保密。我得到资料后,改进后,与大家共享。
回复

使用道具 举报

7#
发表于 2016-8-6 02:39:20 来自手机 | 只看该作者
gdisk不是一般人玩的,小心,小心

点评

但编程时候小心点,排除到操作硬盘的情况,安全还是有保证的。  详情 回复 发表于 2016-12-1 12:46
确实如此。  详情 回复 发表于 2016-8-6 09:33
回复

使用道具 举报

8#
 楼主| 发表于 2016-8-6 09:33:16 来自手机 | 只看该作者
红毛樱木 发表于 2016-8-6 02:39
gdisk不是一般人玩的,小心,小心

确实如此。
回复

使用道具 举报

9#
 楼主| 发表于 2016-8-6 09:34:27 来自手机 | 只看该作者
还是分区助手命令行简单安全。
回复

使用道具 举报

10#
发表于 2016-8-6 10:55:33 | 只看该作者
能做个图形化界面就更好了

点评

核心代码已经搞定,我这是供大家做成图形界面的,au3,其它语言很容易制作出来。  详情 回复 发表于 2016-8-6 11:20
回复

使用道具 举报

11#
 楼主| 发表于 2016-8-6 11:20:38 | 只看该作者
527104427 发表于 2016-8-6 10:55
能做个图形化界面就更好了

核心代码已经搞定,我这是供大家做成图形界面的,au3,其它语言很容易制作出来。
回复

使用道具 举报

12#
发表于 2016-8-6 11:53:15 | 只看该作者
谢谢楼主的分享
回复

使用道具 举报

13#
 楼主| 发表于 2016-8-6 21:27:15 | 只看该作者
实测没有多大问题,本脚本就此终结。
回复

使用道具 举报

14#
发表于 2016-8-7 05:39:59 | 只看该作者
玩了一段时间了,应该没什么问题。
http://bbs.wuyou.net/forum.php?m ... d=374541&extra=

点评

好的,问下,大师的分区工具是gdisk吧?  详情 回复 发表于 2016-8-7 10:42
回复

使用道具 举报

15#
 楼主| 发表于 2016-8-7 10:42:05 | 只看该作者
fuldho 发表于 2016-8-7 05:39
玩了一段时间了,应该没什么问题。
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=374541&extra=

好的,问下,大师的分区工具是gdisk吧?

点评

是的!没错  详情 回复 发表于 2016-8-10 20:43
回复

使用道具 举报

16#
 楼主| 发表于 2016-8-7 15:39:46 | 只看该作者
1关于防止误伤硬盘的问题:
gdisk磁盘编号和分区编号,从1开始,如 1 2 3 4 5……;而bootice和fbinst的磁盘编号和分区编号都是从o开始,如 0 1 2 3 4 5……
在本脚本中,是用fbinst plus脚本列取并获得U盘编号(为安全不列硬盘),gdisk的U盘编号应该是在这个基本上加1。但考虑到各种复杂情况,理论上有仍可能误伤硬盘。
实际编程中,编程应该用gdisk列有所有硬盘分区编号,然后和fbinstU盘编号加1作对比排除,这样子就可以万无一失,不会误伤到硬盘。
cmd脚本太弱,就不智能处理了。
2U盘左端的未分配空间,只指定UD主分区大小,不指定扩展分区大小,用fbinst非强格一次,就可以无损数据区和efi区格式化为UD区。这个发现我在无损制作中已经提及。
3bootice切换来切换去,到底哪个是efi区和data区。这次发现有一个分区表顺序强制按物理分区顺序排序的脚本,解决了这个问题。
但是无损升级PE时候,bootice切换efi区可见,理论上有可能失败,编程者还是要想办法判断清楚切换后可见区是否一定是efi区 ,以免误清空U盘数据区数据。
回复

使用道具 举报

17#
发表于 2016-8-7 15:48:20 | 只看该作者
fbinst不支持windows10x64吗,试了2U盘,都无法找到?

点评

右击以管理员权限运行脚本。  详情 回复 发表于 2016-8-7 22:51
回复

使用道具 举报

18#
 楼主| 发表于 2016-8-7 22:51:31 来自手机 | 只看该作者
2011阿星 发表于 2016-8-7 15:48
fbinst不支持windows10x64吗,试了2U盘,都无法找到?

右击以管理员权限运行脚本。
回复

使用道具 举报

19#
发表于 2016-8-10 12:34:37 | 只看该作者
谢谢谢谢谢谢谢谢 辛苦了
回复

使用道具 举报

20#
发表于 2016-8-10 20:43:23 | 只看该作者
zds1210 发表于 2016-8-7 10:42
好的,问下,大师的分区工具是gdisk吧?

是的!没错
回复

使用道具 举报

21#
 楼主| 发表于 2016-8-11 22:53:09 | 只看该作者
把cmd源码也帖出来了。
回复

使用道具 举报

22#
发表于 2016-8-13 14:19:09 | 只看该作者
非常感谢楼主的分享
回复

使用道具 举报

23#
 楼主| 发表于 2016-8-19 23:04:54 | 只看该作者
多多分享是良方。
回复

使用道具 举报

24#
 楼主| 发表于 2016-8-21 22:45:34 | 只看该作者
希望同志们关注下。
回复

使用道具 举报

25#
发表于 2016-8-21 22:52:36 | 只看该作者
感谢分享!好好学习一下!
回复

使用道具 举报

26#
发表于 2016-11-29 20:00:21 | 只看该作者
一直没人做成可执行文件???
回复

使用道具 举报

27#
发表于 2016-11-30 08:39:57 | 只看该作者
谢谢分享,你的辛苦给我们带了方便,向您致敬
回复

使用道具 举报

28#
 楼主| 发表于 2016-12-1 12:46:48 | 只看该作者
红毛樱木 发表于 2016-8-6 02:39
gdisk不是一般人玩的,小心,小心

但编程时候小心点,排除到操作硬盘的情况,安全还是有保证的。
回复

使用道具 举报

29#
发表于 2016-12-2 14:25:54 | 只看该作者
谢谢分享
回复

使用道具 举报

30#
发表于 2016-12-9 21:44:16 来自手机 | 只看该作者
谢谢分享!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-30 21:26

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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