无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5752|回复: 52
打印 上一主题 下一主题

[原创] PE下自动安装操作系统批处理0516更新

  [复制链接]
跳转到指定楼层
#
发表于 2024-5-14 14:14:16 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 as8686886 于 2024-5-16 10:54 编辑

使用条件:须挂载ISO到本地Y盘
挂载方法:
1、PXE启动使用HTTPDISK挂载
2、使用局域网共享挂载ISO
3、存储设备放置ISO
日常维护之用,配合自动应答文件更省事!仅供参考!最新版见24#

  1. @echo off
  2. color 0a
  3. mode con: cols=65 lines=40
  4. title Windows系统全自动化安装器 By:as8686886

  5. REM 判断ISO内是否有install.wim
  6. IF NOT EXIST Y:\sources\install.wim (goto NoInsWIM)

  7. REM 判断当前运行环境:WinPE执行、非PE拒绝执行
  8. @reg query HKLM\SYSTEM\CurrentControlSet\Control |find "WinPE">NUL&&goto WinPE||goto NoWinPE

  9. :WinPE
  10. REM 判断启动模式BIOS或者UEFI
  11. @reg query HKLM\System\CurrentControlSet\Control /v  PEFirmwareType |find "0x1" >NUL&& set OSmode=BIOS || set OSmode=UEFI
  12. if "%OSMode%"=="BIOS" goto BIOS
  13. if "%OSMode%"=="UEFI" goto UEFI
  14. REM goto NoWinPe

  15. :BIOS
  16. set BootDrv=C:
  17. setlocal enabledelayedexpansion
  18. (
  19. echo select disk 0
  20. echo clean
  21. echo convert mbr
  22. echo create partition primary
  23. echo active
  24. echo format fs=ntfs label="OS" quick
  25. echo assign letter C
  26. )>%~dp0DISKPART.TXT
  27. goto FDISK

  28. :UEFI
  29. set BootDrv=Z:
  30. setlocal enabledelayedexpansion
  31. (
  32. echo select disk 0
  33. echo clean
  34. echo convert GPT
  35. echo create partition efi size=500
  36. echo format fs=fat32 label="ESP" quick
  37. echo assign letter z
  38. echo create partition primary
  39. echo format fs=ntfs label="OS" quick
  40. echo assign letter C
  41. )>%~dp0DISKPART.TXT
  42. goto FDISK

  43. :FDISK
  44. echo.&echo 正在对磁盘进行分区……
  45. diskpart /s DISKPART.TXT>NUL
  46. cls
  47. goto InstallOS

  48. :InstallOS
  49. set ISOPath=Y:\sources
  50. echo 本ISO包含以下系统镜像:
  51. dism /Get-WimInfo /WimFile:%ISOPath%\install.wim

  52. set /P NUM=请输入要安装的系统索引号:
  53. cls
  54. dism /Apply-Image /ImageFile:%ISOPath%\install.wim /Index:%NUM% /ApplyDir:C:\

  55. bcdboot C:\Windows /l zh-cn /s %BootDrv% /f %OSMode%
  56. goto end

  57. :NoWinPe
  58. echo.&echo 当前系统环境为非WinPE环境,程序不允许执行,程序退出!
  59. echo.&pause
  60. exit

  61. :NoInsWIM
  62. echo.&echo 当前挂载的ISO不是标准的Windows系统的ISO或未挂载系统ISO,安装无法进行,程序退出!
  63. echo.&pause
  64. exit

  65. :end
  66. echo.&echo 系统安装完毕!
  67. echo.&pause
  68. exit
复制代码



点评

用心了  发表于 2024-5-20 17:51
辛苦了  发表于 2024-5-14 18:04

评分

参与人数 1无忧币 +2 收起 理由
yyz2191958 + 2 赞一个!

查看全部评分

46#
发表于 2024-11-12 15:29:07 | 只看该作者
学习
回复

使用道具 举报

45#
发表于 2024-10-18 15:13:21 | 只看该作者
感谢分享。
回复

使用道具 举报

44#
发表于 2024-10-18 14:56:32 | 只看该作者
感谢
回复

使用道具 举报

43#
发表于 2024-10-18 13:18:14 | 只看该作者
感谢分享
回复

使用道具 举报

42#
发表于 2024-9-1 16:48:21 | 只看该作者
感谢分享!
回复

使用道具 举报

41#
发表于 2024-9-1 14:48:48 | 只看该作者
as8686886 发表于 2024-5-17 20:41
这确实是个问题,目前还没找到批处理判断SSD和机械的方法

可以使用 diskpart 的 sel disk N 选择好硬盘,然后使用 detail disk 查找到 PCIROOT(0)#PCI(0000)#PCI(0000)#NVME(000000000) 类似的 ID,之后在脚本中可以使用 sel disk PCIROOT(0)#PCI(0000)#PCI(0000)#NVME(000000000) 的方式来选择硬盘
回复

使用道具 举报

40#
发表于 2024-9-1 13:51:32 | 只看该作者
邪恶海盗 发表于 2024-5-14 14:44
Ghost网克啊...

-------------------------

SSD 时代,还Ghost,晕

真是够折磨SSD的
回复

使用道具 举报

39#
发表于 2024-9-1 13:48:01 | 只看该作者
我也写过类似的,不过没有 LZ 这么完善
回复

使用道具 举报

38#
发表于 2024-8-30 08:22:40 | 只看该作者
支持
回复

使用道具 举报

37#
发表于 2024-8-28 22:41:02 来自手机 | 只看该作者
学习一下,收藏了谢谢
回复

使用道具 举报

36#
发表于 2024-5-28 16:18:15 | 只看该作者
谢谢分享。
回复

使用道具 举报

35#
发表于 2024-5-18 11:53:15 | 只看该作者
感谢提供分享!
回复

使用道具 举报

34#
发表于 2024-5-18 10:25:25 | 只看该作者
谢谢分享
回复

使用道具 举报

33#
发表于 2024-5-17 23:05:04 | 只看该作者
as8686886 发表于 2024-5-17 22:13
目前做出来有两种一种wmic获取一种diskpart获取,但是自动判断还没搞出来。只能手动输入硬盘号来操作。
...

论坛有个bjay2008xmy搞过一个U盘自动化恢复系统,有多个系统盘、无系统盘的情况下都不进行操作,基于数据安全的前提下,这个思路同样也可以用于安装全新系统。
无论是自动恢复还是自动安装系统,都必要基于数据安全的前提上,如果没有完善的解决办法,不如不做。
回复

使用道具 举报

32#
 楼主| 发表于 2024-5-17 22:13:55 | 只看该作者
Su_jacc 发表于 2024-5-17 20:58
我的想法是自动安装操作系统,电脑必须要求只能有一个硬盘。你这个方案如果用在我的电脑上,我机械硬盘的 ...

目前做出来有两种一种wmic获取一种diskpart获取,但是自动判断还没搞出来。只能手动输入硬盘号来操作。
wmic获取

diskpart获取

回复

使用道具 举报

31#
发表于 2024-5-17 21:18:35 | 只看该作者
驚為天人的神作,看了讓人熱血沸騰,感謝分享。
回复

使用道具 举报

30#
 楼主| 发表于 2024-5-17 21:13:38 | 只看该作者
Su_jacc 发表于 2024-5-17 20:58
我的想法是自动安装操作系统,电脑必须要求只能有一个硬盘。你这个方案如果用在我的电脑上,我机械硬盘的 ...

旧机器好判断,可以用wimc命令获取磁盘列表然后手动选择
回复

使用道具 举报

29#
发表于 2024-5-17 20:58:24 | 只看该作者
as8686886 发表于 2024-5-17 20:41
这确实是个问题,目前还没找到批处理判断SSD和机械的方法

我的想法是自动安装操作系统,电脑必须要求只能有一个硬盘。你这个方案如果用在我的电脑上,我机械硬盘的文件就会全部丢失。
而自动恢复系统简单一点,电脑可以有多个硬盘,但必须安装过且只能有一个操作系统。

点评

目前做出来有两种一种wmic获取一种diskpart获取,但是自动判断还没搞出来。只能手动输入硬盘号来操作。 wmic获取 [attachimg]541719[/attachimg] diskpart获取 [attachimg]541720[/attachimg]  详情 回复 发表于 2024-5-17 22:13
旧机器好判断,可以用wimc命令获取磁盘列表然后手动选择  详情 回复 发表于 2024-5-17 21:13
回复

使用道具 举报

28#
 楼主| 发表于 2024-5-17 20:41:57 | 只看该作者
Su_jacc 发表于 2024-5-17 18:19
有一种情况是这样的,在机械硬盘和M.2固态硬盘搭配的主机,机械硬盘在diskpart显示的硬盘号为0,而固态硬盘 ...

这确实是个问题,目前还没找到批处理判断SSD和机械的方法
回复

使用道具 举报

27#
发表于 2024-5-17 18:19:59 | 只看该作者
有一种情况是这样的,在机械硬盘和M.2固态硬盘搭配的主机,机械硬盘在diskpart显示的硬盘号为0,而固态硬盘显示为1。所以你指定diskpart对0号硬盘进行分区在这种情况是不适用的。

点评

这确实是个问题,目前还没找到批处理判断SSD和机械的方法  详情 回复 发表于 2024-5-17 20:41
回复

使用道具 举报

26#
发表于 2024-5-16 19:44:13 | 只看该作者
感谢分享,学习
回复

使用道具 举报

25#
发表于 2024-5-16 17:47:07 | 只看该作者
谢谢分享
回复

使用道具 举报

24#
发表于 2024-5-16 17:04:25 | 只看该作者
谢谢分享
回复

使用道具 举报

23#
 楼主| 发表于 2024-5-16 10:54:42 | 只看该作者
最新版见24#
回复

使用道具 举报

22#
 楼主| 发表于 2024-5-16 10:48:44 | 只看该作者
本帖最后由 as8686886 于 2024-5-16 13:12 编辑

5月16日完善版出来了,做如下更改:
1、修改了代码执行逻辑,先选择要安装的镜像在分区格盘
2、修复某些PE下老版本Dism不能识别Get-WimInfo参数导致无法正常释放Wim文件问题
3、格式化、分区磁盘等危险操作增加提示和倒计时
4、增加判断卷标OS分区的盘符,防止有的情况下磁盘盘符为非C盘安装失败【虚拟机下C盘盘符有时候会分给ESP盘】
5、增加是否需要unattend无人值守安装代码【须自备文件】
6、其余遇到了在完善!
  1. @echo off
  2. color 0a
  3. mode con: cols=65 lines=50
  4. title Windows系统全自动化安装器 By:as8686886

  5. REM 判断DISM运行环境
  6. @dism /Get-WimInfo |find "get-wiminfo">NUL&&goto CopyFile||goto WIM

  7. :CopyFile
  8. xcopy %~dp0fx\wimprovider.dll %SystemRoot%\System32\Dism\ /y>NUL
  9. xcopy %~dp0fx\wimprovider.dll.mui %SystemRoot%\System32\Dism\zh-CN\ /y>NUL

  10. :WIM
  11. REM 判断ISO内是否有install.wim
  12. IF NOT EXIST Y:\sources\install.wim (goto NoInsWIM)

  13. REM 判断当前运行环境:WinPE执行、非PE拒绝执行
  14. @reg query HKLM\SYSTEM\CurrentControlSet\Control |find "WinPE">NUL&&goto WinPE||goto NoWinPE

  15. :WinPE
  16. REM 判断启动模式BIOS或者UEFI
  17. @reg query HKLM\System\CurrentControlSet\Control /v  PEFirmwareType |find "0x1" >NUL&& set OSmode=BIOS || set OSmode=UEFI
  18. if "%OSMode%"=="BIOS" goto BIOS
  19. if "%OSMode%"=="UEFI" goto UEFI
  20. REM goto NoWinPe

  21. :BIOS
  22. set BootDrv=C:
  23. setlocal enabledelayedexpansion
  24. (
  25. echo select disk 0
  26. echo clean
  27. echo convert mbr
  28. echo create partition primary
  29. echo active
  30. echo format fs=ntfs label="OS" quick
  31. echo assign letter C
  32. )>%temp%\DISKPART.TXT
  33. goto InstallOS

  34. :UEFI
  35. set BootDrv=Z:
  36. setlocal enabledelayedexpansion
  37. (
  38. echo select disk 0
  39. echo clean
  40. echo convert GPT
  41. echo create partition efi size=500
  42. echo format fs=fat32 label="ESP" quick
  43. echo assign letter z
  44. echo create partition primary
  45. echo format fs=ntfs label="OS" quick
  46. echo assign letter C
  47. )>%temp%\DISKPART.TXT
  48. goto InstallOS

  49. :InstallOS
  50. set ISOPath=Y:\sources
  51. echo 挂载的ISO包含以下系统镜像:
  52. dism /Get-WimInfo /WimFile:%ISOPath%\install.wim
  53. echo.
  54. set /P NUM=请输入要安装的系统索引号:
  55. goto FDISK

  56. :FDISK
  57. cls
  58. echo.&echo 警告:此操作会丢失全盘数据,确认要继续操作?
  59. echo.&echo 即将运行磁盘分区,如不需要运行关闭该窗口即可,10秒后开始执行...
  60. timeout /t 10 /nobreak
  61. echo.&echo 正在对磁盘进行分区……
  62. diskpart /s %temp%\DISKPART.TXT>NUL
  63. choice /t 2 /d y /n >nul
  64. del /q/s %temp%\DISKPART.TXT>NUL
  65. echo.&echo 磁盘分区完成。
  66. choice /t 2 /d y /n >nul
  67. cls
  68. goto startos

  69. :startos
  70. REM 判断卷标OS分区的盘符,防止有的情况下磁盘盘符为非C盘
  71. for /f "tokens=2 delims==" %%a in ('wmic logicaldisk where "VolumeName='OS'" get Name /Value') do set SysDrv=%%a
  72. dism /Apply-Image /ImageFile:%ISOPath%\install.wim /Index:%NUM% /ApplyDir:%SysDrv%\

  73. bcdboot %SysDrv%\Windows /l zh-cn /s %BootDrv% /f %OSMode%
  74. echo 是否需要unattend无人值守安装(是1 否0)?
  75. set /p oobe=请输入[0,1]:
  76. if "%oobe%"=="1" goto unattend
  77. if "%oobe%"=="0" goto end

  78. :unattend
  79. xcopy %~dp0fx\oobe.cmd %SysDrv%\Windows\Setup\Scripts\ /y >nul
  80. goto end

  81. :NoWinPe
  82. echo.&echo 当前系统环境为非WinPE环境,程序不允许执行,程序退出!
  83. echo.&pause
  84. exit

  85. :NoInsWIM
  86. echo.&echo 当前挂载的ISO不是标准的Windows系统的ISO或未挂载系统ISO,安装无法进行,程序退出!
  87. echo.&pause
  88. exit

  89. :end
  90. echo.&echo 系统安装完毕!
  91. echo.&pause
  92. exit
复制代码



点评

牛,期待楼主能早日放出成品,测试一下  发表于 2024-5-20 17:26
回复

使用道具 举报

21#
发表于 2024-5-15 10:39:00 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

20#
发表于 2024-5-15 09:29:29 | 只看该作者
感谢分享
回复

使用道具 举报

19#
发表于 2024-5-15 08:12:08 | 只看该作者
谢谢分享
回复

使用道具 举报

18#
发表于 2024-5-14 19:56:27 | 只看该作者
长知识了,感谢分享
回复

使用道具 举报

17#
发表于 2024-5-14 19:21:36 | 只看该作者
看起来引导提示写得不错的
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-25 11:14

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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