Board logo

标题: 把以下 diakpart 硬盘分区的批处理脚本写通 [打印本页]

作者: U_BLUE    时间: 2024-5-19 16:18     标题: 把以下 diakpart 硬盘分区的批处理脚本写通

把下面目录写通  目前选中123 再按0 就出错直接退出
  1. @echo off
  2. title 批处理脚本分区
  3. :: Date: 2024-05-16
  4. :: 以管理员权限运行
  5. if /i "%systemdrive%"=="C:" reg query HKU\S-1-5-20>nul 2>nul || echo;CreateObject^("Shell.Application"^).ShellExecute "%~f0", "%*", "", "runas", 1 > "%temp%\getadmin.vbs" && cscript //b "%temp%\getadmin.vbs" && exit /b & del "%temp%\getadmin.vbs" /f /q>nul
  6. :main
  7. SetLocal EnableDelayedExpansion
  8. :: 跳转到批处理所在目录
  9. set DIR_CUR=%~dp0
  10. cd %DIR_CUR%
  11. :: 设置时间
  12. set ETR=30
  13. :: 确保choice在系统中,部分pe精简掉了
  14. copy %DIR_CUR%_DESKTOP\choice.exe %windir%\sysWOW64\ /y
  15. copy %DIR_CUR%_DESKTOP\choice.exe %windir%\system32\ /y
  16. cls
  17. color 2F
  18. echo.
  19. echo    =========================选择分区方案=============================
  20. echo.                                                      
  21. echo        [ 1 ] 1分区,全部分配给C盘                          
  22. echo        [ 2 ] 2分区,C盘150G,其他给D盘 【默认选项】        
  23. echo        [ 3 ] 3分区,C盘200G,D盘500G,其他给E盘            
  24. echo        [ 0 ] 返回 重新选择                                 
  25. echo.
  26. echo    =================================================================
  27. echo           请输入硬盘分区方案 [1230],%ETR%秒后默认分区方案: 2
  28. choice /c 1230 /n>nul /t %ETR% /d 2
  29. echo    选择方案: %errorlevel%
  30. if %errorlevel%==4 (goto main)
  31. if %errorlevel%==3 (set "CRT_PART_NAME=3分区,C盘200G D盘500G 其他给E盘" & set "CRT_PART=CP3")
  32. if %errorlevel%==2 (set "CRT_PART_NAME=2分区,C盘100G,其他给D盘       " & set "CRT_PART=CP2")
  33. if %errorlevel%==1 (set "CRT_PART_NAME=1分区,全部分配给C盘            " & set "CRT_PART=CPAll")
  34. :: 显示磁盘分区情况,测试盘符被修改后此部分会出错,待修复
  35. cls
  36. echo.
  37. echo    =====================磁盘分区详情=====================
  38. echo.
  39. :: 磁盘总数,从0开始
  40. set /a "dn=0"
  41. for /f "delims=" %%i in ('echo list disk^|diskpart^|findstr /i "联机"') do (set /a dn+=1)
  42. set /a DSK_NO=%dn%-1
  43. :: 生成磁盘信息
  44. if exist dp_t.txt del dp_t.txt
  45. for /l %%i in (0,1,!DSK_NO!) do (
  46.    (echo sel disk %%i & echo detail disk & echo list part)|diskpart>>dp_t.txt
  47. )
  48. ::解析内容,生成硬盘分区文件 [序号,磁盘号,分区号,大小,文件系统, 盘符,标签]
  49. SetLocal EnableDelayedExpansion
  50. for /f "delims=" %%j in (dp_t.txt) do (
  51.    set "oneline=%%j"
  52.    ::行号
  53.    set /a l+=1
  54.    ::echo 第!l!行: !oneline:~38,4!
  55.    if "!oneline:~0,5!"=="在计算机上" (set /a n=!l!+2 & set /a t=!l!+4 & set /a p=!l!+6)
  56.    if !l!==!n! (set nn=!oneline:~3,1!)
  57.    if !l!==!t! (set tt=!oneline!)
  58.    if !l!==!p! (set pp=!oneline:~7! & (echo    [ !nn! ] -磁盘-   !tt! - !pp!))
  59.    if "!oneline:~0,7!"=="  分区   " (set /a b+=1 & (echo      !oneline:~10,1!    !oneline:~15,3!  !oneline:~33,7!))
  60. )
  61. del dp_t.txt
  62. echo.
  63. echo    ======================================================
  64. echo    采用分区 %CRT_PART_NAME%
  65. echo    ======================================================
  66. echo    请输入目标硬盘 [012...],%ETR%秒后默认硬盘: 0
  67. choice /c 012 /n>nul /t %ETR% /d 0
  68. if %errorlevel%==3 (set "SEL_DSK=2")
  69. if %errorlevel%==2 (set "SEL_DSK=1")
  70. if %errorlevel%==1 (set "SEL_DSK=0")
  71. echo    选择硬盘: %SEL_DSK%
  72. :: 检查所有硬盘是否已分区,不包括U盘
  73. (@echo list volume & @echo exit)|diskpart|find /i "磁盘分区">nul
  74. if %errorlevel%==0 (set DSK_STAT=1) else (set DSK_STAT=0)
  75. :: 获取硬盘参数
  76. ((@echo select disk %SEL_DSK% & @echo detail disk & @echo exit)|diskpart)>a.txt
  77. for /f "skip=10 delims="  %%a  in  (a.txt)  do  (set  DSK_TYP=%%~a & goto Show)
  78. :Show
  79. for /f "tokens=3 skip=12 delims= "  %%a  in  (a.txt)  do  (set  DSK_PROT=%%~a & goto sss1)
  80. :sss1
  81. del a.txt
  82. goto conf
  83. :://conf
  84. cls
  85. echo.
  86. echo.
  87. echo   ______________________确认安装方案_____________________
  88. echo  ^|                                                       ^|
  89. echo  ^|   目标: %SEL_OS_NAME%                              ^|
  90. ::  应答文件: %UNATT%
  91. echo  ^|   目标: %DSK_TYP:~0,15%    磁盘协议:%DSK_PROT%           ^|
  92. echo  ^|   分区: %CRT_PART_NAME%             ^|
  93. echo  ^|                                                       ^|
  94. if %DSK_STAT%==0 (echo  ^|                      硬盘未分区                       ^|) else (color 4f & echo  ^|       ★★★ 硬盘已分区-请注意数据安全 ★★★         ^|)
  95. echo  ^|                                                       ^|
  96. echo  ^|       [ Y ] 确认上述方案  [ X ] 返回 重新选择         ^|
  97. echo  ^|_______________________________________________________^|
  98. echo.
  99. echo    请确认方案 [ X / Y ]:
  100. choice /c xy /n>nul
  101. if %errorlevel%==2 (goto way)
  102. if %errorlevel%==1 (goto main)
  103. :way
  104. :: 跳转到相应方案
  105. if %CRT_PART%==CPAll goto x%CRT_PART%
  106. if %CRT_PART%==CP3 goto x%CRT_PART%
  107. if %CRT_PART%==CP2 goto x%CRT_PART%
  108. :xCPAll
  109. color 2f
  110. echo =======================开始硬盘分区=======================
  111. (
  112. echo select disk %SEL_DSK%
  113. echo clean
  114. echo convert gpt
  115. :: 创建EFI分区,大小为200M
  116. echo create partition efi size=200
  117. echo format quick fs=fat32 label="System"
  118. echo assign letter=z
  119. :: 创建MSR分区,大小为128M
  120. echo create partition msr size=16
  121. echo format quick fs=fat32
  122. :: 创建主分区
  123. echo create partition primary
  124. echo format fs=ntfs quick
  125. echo assign letter=c
  126. echo list volume
  127. echo exit
  128. )|diskpart
  129. goto DepOS
  130. :xCP2
  131. color 2f
  132. echo =======================开始硬盘分区=======================
  133. (
  134. ... 字数限制 省略部分
  135. )|diskpart
  136. goto main
  137. :xCP3
  138. color 2f
  139. echo =======================开始硬盘分区=======================
  140. (
  141. echo select disk %SEL_DSK%
  142. echo clean
  143. echo convert gpt
  144. :: 创建EFI分区,大小为350M
  145. echo create partition efi size=350
  146. echo format quick fs=fat32 label="System"
  147. echo assign letter=z
  148. :: 创建MSR分区,大小为128M
  149. echo create partition msr size=128
  150. echo format quick fs=fat32
  151. :: 创建主分区, 大小为150G,如需修改大小,请直接替换下面size=[ 204806 ]
  152. echo create partition primary size=204806
  153. echo format fs=ntfs quick
  154. echo assign letter=c
  155. :: 创建第二个主分区, 大小为500G
  156. echo create partition primary size=512002
  157. echo format fs=ntfs quick
  158. echo assign letter=d
  159. :: 创建第三个主分区, 大小为剩余容量
  160. echo create partition primary
  161. echo format fs=ntfs quick
  162. echo assign letter=e
  163. echo list volume
  164. echo exit
  165. )|diskpart
  166. goto main
复制代码
30红包
作者: buyiyang    时间: 2024-5-19 20:08

第93行改成
:conf
第141行改成
goto main
作者: U_BLUE    时间: 2024-5-20 11:11

回复 2# buyiyang

大哥  再问一下
  1. echo   ______________________确认安装方案_____________________
  2. echo  ^|                                                       ^|
  3. echo  ^|   目标: %SEL_OS_NAME%                              ^|
  4. ::  应答文件: %UNATT%
  5. echo  ^|   目标: %DSK_TYP:~0,15%    磁盘协议:%DSK_PROT%           ^|
  6. echo  ^|   分区: %CRT_PART_NAME%             ^|
  7. echo  ^|                                                       ^|
  8. if %DSK_STAT%==0 (echo  ^|                      硬盘未分区                       ^|) else (color 4f & echo  ^|       ★★★ 硬盘已分区-请注意数据安全 ★★★         ^|)
  9. echo  ^|                                                       ^|
  10. echo  ^|       [ Y ] 确认上述方案  [ X ] 返回 重新选择         ^|
  11. echo  ^|_______________________________________________________^|
  12. echo.
  13. echo    请确认方案 [ X / Y ]:
  14. choice /c xy /n>nul
  15. if %errorlevel%==2 (goto way)
  16. if %errorlevel%==1 (goto main)
复制代码
这里硬盘没有分区 不会显示 有没有处理办法
作者: buyiyang    时间: 2024-5-20 12:45

回复 3# U_BLUE
第81行改成
  1. (@echo,sel disk %SEL_DSK% & @echo,detail disk & @echo,exit)|diskpart|find /i "磁盘分区">nul
复制代码

作者: newswan    时间: 2024-5-21 07:11

上面太麻烦了

用法
dp.bat 2 mbr 102400 ext 204800
dp.bat 3 gpt 102400 204800

dp.bat
  1. @echo off
  2. SetLocal EnableDelayedExpansion
  3. rem Usage: %0 [ disk id ] [ disk part type ]  [ part type | part size ]...
  4. if "%1" == "" goto :END
  5. set "_DPcmd_= echo sel disk %1 & echo clean "
  6. shift /1
  7. if "%1" == "" goto :END
  8. if /i "%1" == "MBR" (
  9. set _DiskPartType_=MBR
  10. ) else if /i "%1" == "GPT" (
  11. set _DiskPartType_=GPT
  12. (set "_DPcmd_=%_DPcmd_% & echo convert gpt & echo creat part EFI size=260 & echo creat part MSR size=16 ")
  13. )
  14. shift /1
  15. set _parttype_=pri
  16. :Loop
  17. if "%1" == "" goto :L_run
  18. if /i "%1" == "ext" (
  19. set "_DPcmd_=%_DPcmd_% & echo creat part ext "
  20. set "_parttype_=log"
  21. ) else (
  22. (set "_DPcmd_=%_DPcmd_% & echo creat part %_parttype_% size=%1 ")
  23. )
  24. shift /1
  25. goto :Loop
  26. set "_DPcmd_=%_DPcmd_% & echo creat part %_parttype_% "
  27. :L_run
  28. set "_DPcmd_=%_DPcmd_% & echo list part "
  29. cmd /c " (%_DPcmd_%) | diskpart"
  30. :END
  31. pause
  32. exit/b
复制代码

作者: U_BLUE    时间: 2024-5-21 10:45

回复 4# buyiyang


    辛苦在问一下  分区如何4K 对齐 怎么加里面 然后再来一个微信 红包
作者: U_BLUE    时间: 2024-5-21 10:47

回复 5# newswan


    新手不是很懂
作者: buyiyang    时间: 2024-5-21 12:22

回复 6# U_BLUE

创建分区时加上align=1024参数,比如第135行
echo create partition primary align=1024
作者: U_BLUE    时间: 2024-5-21 13:43

回复 8# buyiyang


    加个微信  或者私聊加微




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2