[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 批处理一键装机 分区并部署系统

电脑城新晋技术一枚,为了提高效率,东拉西扯出来的批处理,基本可以正常运行。

求大神关注,优化,提供高见

实战环境:微pe2.2,官方系统镜像及常用软件
  1. @echo off
  2. title ★★★ 系统安装脚本 ★★★
  3. :: Date: 2023-03-08
  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. SetLocal EnableDelayedExpansion
  7. :: 跳转到批处理所在目录
  8. set DIR_CUR=%~dp0
  9. cd %DIR_CUR%
  10. :: 确保choice在系统中,部分pe精简掉了
  11. copy %DIR_CUR%_DESKTOP\choice.exe %windir%\sysWOW64\ /y
  12. copy %DIR_CUR%_DESKTOP\choice.exe %windir%\system32\ /y
  13. :: 暴力更改盘符,防止后面分区、挂载镜像时盘符被占用,完成后重启批处理。此部分实际运行有问题,待修复
  14. if "%1" == "" (goto :Ycl) else (goto :Start)
  15. :Ycl
  16. echo 把CDZO盘符清理出来,防止影响批处理后面执行
  17. (echo sel vol=c & echo assign letter=p)|diskpart>nul
  18. (echo sel vol=d & echo assign letter=q)|diskpart>nul
  19. (echo sel vol=e & echo assign letter=r)|diskpart>nul
  20. (echo sel vol=z & echo assign letter=s)|diskpart>nul
  21. (echo sel vol=o & echo assign letter=t)|diskpart>nul
  22. echo 盘符清理完成,重启批处理
  23. choice /t 20 /d y /n >nul
  24. :: 查找当前批处理的新路径
  25. set "FileName=DeployOS.bat"
  26. echo 正在搜索,请稍候...
  27. for %%a 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 (
  28.   if exist %%a:\ (
  29.     if exist %%a:\%FileName% (set "NEWDEP=%%a:\%FileName%")
  30.   )
  31. )
  32. start %NEWDEP% 6
  33. exit
  34. :Start
  35. :: 系统镜像文件
  36. set W10PROIMG=%DIR_CUR%_OS\WIN10_22H2.iso
  37. set W11PROIMG=%DIR_CUR%_OS\WIN11_22H2.iso
  38. set W10LTSCIMG=%DIR_CUR%_OS\WIN10_LTSC.iso
  39. :: 应答文件
  40. set UNATT10PRO=%DIR_CUR%_OS\Afiles\WIN10.xml
  41. set UNATT11PRO=%DIR_CUR%_OS\Afiles\WIN11.xml
  42. set UNATT10LTSC=%DIR_CUR%_OS\Afiles\WIN10.xml
  43. :: 默认等待时间
  44. set ETR=6
  45. :first
  46. cls
  47. color 1F
  48. echo.
  49. echo    _____________________选择操作系统_____________________
  50. echo   ^|                                                      ^|
  51. echo   ^|  [ 1 ] WIN10 专业版                                  ^|
  52. echo   ^|  [ 2 ] WIN11 专业版                                  ^|
  53. echo   ^|  [ 3 ] WIN10 LTSC   【默认选项】                     ^|
  54. echo   ^|  [ 0 ] 返回 重新选择                                 ^|
  55. echo   ^|______________________________________________________^|
  56. echo.
  57. echo    请输入操作系统 [1230],%ETR%秒后默认系统: 3
  58. choice /c 1230 /n>nul /t %ETR% /d 3
  59. echo    选择系统: %errorlevel%
  60. if %errorlevel%==4 (goto first)
  61. if %errorlevel%==3 (set "SEL_IMG=%W10LTSCIMG%" & set "SEL_IDX=1" & set "SEL_OS_NAME=Windows 10 LTSC" & set "UNATT=%UNATT10LTSC%")
  62. if %errorlevel%==2 (set "SEL_IMG=%W11PROIMG%"  & set "SEL_IDX=4" & set "SEL_OS_NAME=Windows 11 Pro " & set "UNATT=%UNATT11PRO%")
  63. if %errorlevel%==1 (set "SEL_IMG=%W10PROIMG%"  & set "SEL_IDX=4" & set "SEL_OS_NAME=Windows 10 Pro " & set "UNATT=%UNATT10PRO%")
  64. cls
  65. echo.
  66. echo    _____________________选择分区方案_____________________
  67. echo   ^|                                                      ^|
  68. echo   ^|  [ 1 ] 1分区,全部分配给C盘                          ^|
  69. echo   ^|  [ 2 ] 2分区,C盘100G,其他给D盘 【默认选项】        ^|
  70. echo   ^|  [ 3 ] 3分区,C盘200G,D盘500G,其他给E盘            ^|
  71. echo   ^|  [ 0 ] 返回 重新选择                                 ^|
  72. echo   ^|______________________________________________________^|
  73. echo.
  74. echo    准备安装 %SEL_OS_NAME%
  75. echo    -----------------------------------------------------
  76. echo    请输入硬盘分区方案 [1230],%ETR%秒后默认分区方案: 2
  77. choice /c 1230 /n>nul /t %ETR% /d 2
  78. echo    选择方案: %errorlevel%
  79. if %errorlevel%==4 (goto first)
  80. if %errorlevel%==3 (set "CRT_PART_NAME=3分区,C盘200G D盘500G 其他给E盘" & set "CRT_PART=CP3")
  81. if %errorlevel%==2 (set "CRT_PART_NAME=2分区,C盘100G,其他给D盘       " & set "CRT_PART=CP2")
  82. if %errorlevel%==1 (set "CRT_PART_NAME=1分区,全部分配给C盘            " & set "CRT_PART=CPAll")
  83. :: 显示磁盘分区情况,测试盘符被修改后此部分会出错,待修复
  84. cls
  85. echo.
  86. echo    =====================磁盘分区详情=====================
  87. echo.
  88. :: 磁盘总数,从0开始
  89. set /a "dn=0"
  90. for /f "delims=" %%i in ('echo list disk^|diskpart^|findstr /i "联机"') do (set /a dn+=1)
  91. set /a DSK_NO=%dn%-1
  92. :: 生成磁盘信息
  93. if exist dp_t.txt del dp_t.txt
  94. for /l %%i in (0,1,!DSK_NO!) do (
  95.    (echo sel disk %%i & echo detail disk & echo list part)|diskpart>>dp_t.txt
  96. )
  97. ::解析内容,生成硬盘分区文件 [序号,磁盘号,分区号,大小,文件系统, 盘符,标签]
  98. SetLocal EnableDelayedExpansion
  99. for /f "delims=" %%j in (dp_t.txt) do (
  100.    set "oneline=%%j"
  101.    ::行号
  102.    set /a l+=1
  103.    ::echo 第!l!行: !oneline:~38,4!
  104.    if "!oneline:~0,5!"=="在计算机上" (set /a n=!l!+2 & set /a t=!l!+4 & set /a p=!l!+6)
  105.    if !l!==!n! (set nn=!oneline:~3,1!)
  106.    if !l!==!t! (set tt=!oneline!)
  107.    if !l!==!p! (set pp=!oneline:~7! & (echo    [ !nn! ] -磁盘-   !tt! - !pp!))
  108.    if "!oneline:~0,7!"=="  分区   " (set /a b+=1 & (echo      !oneline:~10,1!    !oneline:~15,3!  !oneline:~33,7!))
  109. )
  110. del dp_t.txt
  111. echo.
  112. echo    -----------------------------------------------------
  113. echo    准备安装 %SEL_OS_NAME%
  114. echo    采用分区 %CRT_PART_NAME%
  115. echo    -----------------------------------------------------
  116. echo    请输入目标硬盘 [012...],%ETR%秒后默认硬盘: 0
  117. choice /c 012 /n>nul /t %ETR% /d 0
  118. if %errorlevel%==3 (set "SEL_DSK=2")
  119. if %errorlevel%==2 (set "SEL_DSK=1")
  120. if %errorlevel%==1 (set "SEL_DSK=0")
  121. echo    选择硬盘: %SEL_DSK%
  122. :: 检查所有硬盘是否已分区,不包括U盘
  123. (@echo list volume & @echo exit)|diskpart|find /i "磁盘分区">nul
  124. if %errorlevel%==0 (set DSK_STAT=1) else (set DSK_STAT=0)
  125. :: 获取硬盘参数
  126. ((@echo select disk %SEL_DSK% & @echo detail disk & @echo exit)|diskpart)>a.txt
  127. for /f "skip=10 delims="  %%a  in  (a.txt)  do  (set  DSK_TYP=%%~a & goto Show)
  128. :Show
  129. for /f "tokens=3 skip=12 delims= "  %%a  in  (a.txt)  do  (set  DSK_PROT=%%~a & goto sss1)
  130. :sss1
  131. del a.txt
  132. goto conf
  133. :conf
  134. cls
  135. echo.
  136. echo.
  137. echo   ______________________确认安装方案_____________________
  138. echo  ^|                                                       ^|
  139. echo  ^|   目标: %SEL_OS_NAME%                              ^|
  140. ::  应答文件: %UNATT%
  141. echo  ^|   目标: %DSK_TYP:~0,15%    磁盘协议:%DSK_PROT%           ^|
  142. echo  ^|   分区: %CRT_PART_NAME%             ^|
  143. echo  ^|                                                       ^|
  144. if %DSK_STAT%==0 (echo  ^|                      硬盘未分区                       ^|) else (color 4f & echo  ^|       ★★★ 硬盘已分区-请注意数据安全 ★★★         ^|)
  145. echo  ^|                                                       ^|
  146. echo  ^|       [ Y ] 确认上述方案  [ X ] 返回 重新选择         ^|
  147. echo  ^|_______________________________________________________^|
  148. echo.
  149. echo    请确认方案 [ X / Y ]:
  150. choice /c xy /n>nul
  151. if %errorlevel%==2 (goto way)
  152. if %errorlevel%==1 (goto first)
  153. :way
  154. :: 跳转到相应方案
  155. if %CRT_PART%==CPAll goto x%CRT_PART%
  156. if %CRT_PART%==CP3 goto x%CRT_PART%
  157. if %CRT_PART%==CP2 goto x%CRT_PART%
  158. :xCPAll
  159. color 1f
  160. echo =======================开始硬盘分区=======================
  161. (
  162. echo select disk %SEL_DSK%
  163. echo clean
  164. echo convert gpt
  165. :: 创建EFI分区,大小为500M
  166. echo create partition efi size=500
  167. echo format quick fs=fat32 label="EFI"
  168. echo assign letter=z
  169. :: 创建MSR分区,大小为128M
  170. echo create partition msr size=128
  171. echo format quick fs=fat32
  172. :: 创建主分区
  173. echo create partition primary
  174. echo format fs=ntfs quick
  175. echo assign letter=c
  176. echo list volume
  177. echo exit
  178. )|diskpart
  179. goto DepOS
  180. :xCP2
  181. color 1f
  182. echo =======================开始硬盘分区=======================
  183. (
  184. ... 字数限制 省略部分
  185. )|diskpart
  186. goto DepOS
  187. :xCP3
  188. color 1f
  189. echo =======================开始硬盘分区=======================
  190. (
  191. echo select disk %SEL_DSK%
  192. echo clean
  193. echo convert gpt
  194. :: 创建EFI分区,大小为500M
  195. echo create partition efi size=500
  196. echo format quick fs=fat32 label="EFI"
  197. echo assign letter=z
  198. :: 创建MSR分区,大小为128M
  199. echo create partition msr size=128
  200. echo format quick fs=fat32
  201. :: 创建主分区, 大小为150G,如需修改大小,请直接替换下面size=[ 204806 ]
  202. echo create partition primary size=204806
  203. echo format fs=ntfs quick
  204. echo assign letter=c
  205. :: 创建第二个主分区, 大小为500G
  206. echo create partition primary size=512002
  207. echo format fs=ntfs quick
  208. echo assign letter=d
  209. :: 创建第三个主分区, 大小为剩余容量
  210. echo create partition primary
  211. echo format fs=ntfs quick
  212. echo assign letter=e
  213. echo list volume
  214. echo exit
  215. )|diskpart
  216. goto DepOS
  217. :DepOS
  218. color 0f
  219. echo 硬盘分区完成
  220. echo =======================开始部署系统=======================
  221. ::获取镜像列表dism /get-wiminfo /wimfile:%DIR_CUR%_OS\WIN10_LTSC\sources\install.wim
  222. imdisk  -a -f %SEL_IMG% -m O:
  223. Dism /Apply-Image /ImageFile:O:\sources\install.wim /Index:%SEL_IDX%  /ApplyDir:C:\
  224. bcdboot c:\Windows /s z: /f uefi /l zh-cn
  225. md C:\Windows\Panther
  226. copy %UNATT% C:\Windows\Panther\Unattend.xml /y
  227. echo 硬盘分区完成
  228. echo 系统部署完成
  229. echo =======================开始拷贝软件=======================
  230. echo.
  231. xcopy %DIR_CUR%_DESKTOP\* C:\Users\Public\desktop\必装软件\ /s/e/y
  232. copy %DIR_CUR%_DESKTOP\PreInst.bat "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\" /y
  233. shutdown -r -t 0
复制代码
1

评分人数

进系统后执行的批处理 PreInst.bat
  1. @echo off
  2. mode con cols=60 lines=68
  3. title ★★★ 软件安装脚本 ★★★
  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. :: 完成获取,下面可以开始写你自己的代码了
  7. :: 只能在预装时使用,否则退出
  8. if not exist C:\Users\Public\desktop\必装软件\ (
  9.         echo 预安装使用脚本,请退出
  10.               exit /b
  11.     ) else (
  12.         echo 开始预安装
  13.               goto Start
  14.     )
  15. :Start
  16. color 2E
  17. echo.
  18. echo  尝试关闭杀软,防止误伤
  19. taskkill /im SecurityHealthService.exe /f
  20. taskkill /im SecurityhealthSystray.exe /f
  21. taskkill /im SecHealthUI.exe /f
  22. :: 优化系统
  23. # UAC低 关闭的话将每个/d 后面的数字修改为 0 0 0
  24. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "ConsentPromptBehaviorAdmin" /t reg_dword /d 5 /F
  25. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "EnableLUA" /t reg_dword /d 1 /F
  26. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System" /v "PromptOnSecureDesktop" /t reg_dword /d 0 /F
  27. :: 禁用 Windows Update和Windows Update Medic Service  ( 禁用wuauserv也是这个修改方法 )
  28. REG add "HKLM\SYSTEM\CurrentControlSet\Services\WaaSMedicSvc" /v "Start" /t REG_DWORD /d "4" /f
  29. REG add "HKLM\SYSTEM\CurrentControlSet\Services\wuauserv" /v "Start" /t REG_DWORD /d "4" /f
  30. :: 系统自动更新
  31. net stop "wuauserv"
  32. sc config "wuauserv" start= disabled
  33. :: 微软拼音默认中文
  34. ::reg add HKCU\Software\Microsoft\InputMethod\Settings\CHS /v "Default Mode" /t REG_DWORD /d 0 /f
  35. :: 禁用快速启动,它会导致一些系统故障、系统不稳定、卡bug
  36. powercfg /h off
  37. ::使用windows自带的图片查看器
  38. set wpv="HKLM\SOFTWARE\Microsoft\Windows Photo Viewer\Capabilities\FileAssociations"
  39. REG  add %wpv%  /v  ".jpeg"  /t  REG_SZ  /d  "PhotoViewer.FileAssoc.Tiff" /f
  40. REG  add %wpv%  /v  ".jpg"   /t  REG_SZ  /d  "PhotoViewer.FileAssoc.Tiff" /f
  41. REG  add %wpv%  /v  ".png"   /t  REG_SZ  /d  "PhotoViewer.FileAssoc.Tiff" /f
  42. REG  add %wpv%  /v  ".bmp"   /t  REG_SZ  /d  "PhotoViewer.FileAssoc.Tiff" /f
  43. echo 请双击或右击图片,选择“照片查看器”即可
  44. :: 右下角时间显示秒,执行完重启后显示。
  45. reg add HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced /v ShowSecondsInSystemClock /t REG_DWORD /d "1" /f
  46. :: 任务栏日期显示“星期几”
  47. reg add "HKEY_CURRENT_USER\Control Panel\International" /v "sLongDate" /d "yyyy'年'M'月'd'日', dddd" /t REG_SZ /f
  48. reg add "HKEY_CURRENT_USER\Control Panel\International" /v "sShortDate" /d "yyyy/M/d/ddd" /t REG_SZ /f
  49. :: 关闭家庭组
  50. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\HomeGroup" /v "DisableHomeGroup" /d 1 /t REG_DWORD /f
  51. :: 去除快捷方式小箭头和后缀
  52. reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons" /v 29 /d "%systemroot%\system32\imageres.dll,197" /t reg_sz /f
  53. reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer" /v link /d "00000000" /t REG_BINARY /f
  54. del "%userprofile%\AppData\Local\iconcache.db" /f /q
  55. :: 禁用索引服务
  56. del /f /s /q %ALLUSERSPROFILE%\Microsoft\Search\Data\Applications\Windows
  57. sc stop "wsearch"
  58. sc config "WMPNetworkSvc" start= disabled
  59. sc config "wsearch" start= disabled
  60. :: 疑难解答和系统诊断服务
  61. sc stop "WdiSystemHost"
  62. sc stop "WdiServiceHost"
  63. sc stop "DPS"
  64. sc config "DPS" start= disabled
  65. sc config "WdiServiceHost" start= disabled
  66. sc config "WdiSystemHost" start= disabled
  67. :: Superfetch服务
  68. del /f /s /q "%windir%\Prefetch\*.pf"
  69. net stop "SysMain"
  70. sc config "SysMain" start= disabled
  71. :TestNet
  72. echo.
  73. echo 测试网络连接...
  74. ping www.jd.com >nul
  75. if errorlevel 1 goto WaitNet
  76. if errorlevel 0 goto Cont
  77. :WaitNet
  78. cls
  79. echo.
  80. color 4F
  81. echo  网络不通
  82. echo.
  83. echo  请将电脑联网,以便激活系统和安装驱动
  84. ping -n 10 127.0.0.1 >nul
  85. goto TestNet
  86. :Cont
  87. color 2E
  88. cls
  89. echo.
  90. echo  网络已连接
  91. echo.
  92. echo  开始安装必要软件、激活系统、安装驱动
  93. start /wait C:\Users\Public\desktop\必装软件\DreamCast微软常用VC库合集2023.03.15.exe /silent /verysilent
  94. start /wait C:\Users\Public\desktop\必装软件\BANDIZIP-SETUP.exe /S
  95. call C:\Users\Public\desktop\必装软件\MAS_AIO.cmd /HWID
  96. ::start /wait C:\Users\Public\desktop\必装软件\W10DigitalActivation_x64.exe /activate /hwid
  97. start devmgmt.msc
  98. start /wait C:\Users\Public\desktop\必装软件\驱动精灵标准版_v9.70.0.104.exe
  99. echo  尝试启动杀毒软件
  100. start SecurityHealthService.exe
  101. start SecurityhealthSystray.exe
  102. start SecHealthUI.exe
  103. echo  执行完毕,清理垃圾并重启电脑
  104. del /f /s /q C:\Users\Public\desktop\必装软件\DreamCast微软常用VC库合集2023.03.15.exe
  105. del /f /s /q C:\Users\Public\desktop\必装软件\BANDIZIP-SETUP.exe
  106. del /f /s /q C:\Users\Public\desktop\必装软件\choice.exe
  107. del /f /s /q C:\Users\Public\desktop\必装软件\PreInst.bat
  108. del %0
  109. ::exit
  110. shutdown -r -t 0
复制代码

TOP

感谢大佬分享, 这应该是全盘全新分区安装系统吧?  要是能加上一个选项, 只重装现有的win系统所在分区就好了, 全盘分区, 应该是新装机的电脑使用, 日后重装系统, 估计很少全盘再重分区了

最好加上能识别硬盘分区类型, 例如, 如果是MBR格式的, 那就传统的MBR引导, 如果GTP格式的,那就删了efi和win分区,然后再重新建这两个分区, 然后再安装EFI引导的系统

TOP

返回列表