无忧启动论坛

标题: PE下自动安装操作系统批处理0516更新 [打印本页]

作者: as8686886    时间: 2024-5-14 14:14
标题: PE下自动安装操作系统批处理0516更新
本帖最后由 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-14 14:23
通常用"自动"的都是作死行为...

----------------------------
作者: as8686886    时间: 2024-5-14 14:30
邪恶海盗 发表于 2024-5-14 14:23
通常用"自动"的都是作死行为...

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

新机省事
作者: WUMEIHAI    时间: 2024-5-14 14:38

softwarezheng:thanks you very  much
作者: maisifu    时间: 2024-5-14 14:40
感谢分享!
作者: 邪恶海盗    时间: 2024-5-14 14:44
as8686886 发表于 2024-5-14 14:30
新机省事

Ghost网克啊...

-------------------------
作者: Tatsumki    时间: 2024-5-14 14:48

感谢分享!
作者: wang1126    时间: 2024-5-14 14:53
感谢分享
作者: rengrancunzai    时间: 2024-5-14 14:57
感谢分享!
作者: reninhouse    时间: 2024-5-14 15:35
现在好多ISO里都是好几个系统集成到一起的,还得选择安装哪个系统。
作者: shy20070509    时间: 2024-5-14 16:07
不喜欢自动安装
作者: Su_jacc    时间: 2024-5-14 16:16
封装类系统默认安装第一卷,原版WIN10默认安装专业版,WIN7默认安装旗舰版得了
作者: as8686886    时间: 2024-5-14 16:40
reninhouse 发表于 2024-5-14 15:35
现在好多ISO里都是好几个系统集成到一起的,还得选择安装哪个系统。

你实际用的时候可以把set /P NUM=请输入要安装的系统索引号:改成set NUM= 要使用的镜像的索引号
作者: wang1973    时间: 2024-5-14 18:01
感谢分享!
作者: yyz2191958    时间: 2024-5-14 18:04
支持原创
作者: 享β亻寸木东    时间: 2024-5-14 18:06
感谢分享!
作者: yc2428    时间: 2024-5-14 18:21
感谢分享
作者: Ukyo    时间: 2024-5-14 19:21
看起来引导提示写得不错的
作者: 2012飘水    时间: 2024-5-14 19:56
长知识了,感谢分享
作者: 2010kingkang    时间: 2024-5-15 08:12
谢谢分享
作者: pbmmm    时间: 2024-5-15 09:29
感谢分享
作者: 财源茂盛    时间: 2024-5-15 10:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: as8686886    时间: 2024-5-16 10:48
本帖最后由 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
复制代码




作者: as8686886    时间: 2024-5-16 10:54
最新版见24#
作者: 4424442    时间: 2024-5-16 17:04
谢谢分享
作者: 香国妙手    时间: 2024-5-16 17:47
谢谢分享
作者: BEIKING    时间: 2024-5-16 19:44
感谢分享,学习
作者: Su_jacc    时间: 2024-5-17 18:19
有一种情况是这样的,在机械硬盘和M.2固态硬盘搭配的主机,机械硬盘在diskpart显示的硬盘号为0,而固态硬盘显示为1。所以你指定diskpart对0号硬盘进行分区在这种情况是不适用的。
作者: as8686886    时间: 2024-5-17 20:41
Su_jacc 发表于 2024-5-17 18:19
有一种情况是这样的,在机械硬盘和M.2固态硬盘搭配的主机,机械硬盘在diskpart显示的硬盘号为0,而固态硬盘 ...

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

我的想法是自动安装操作系统,电脑必须要求只能有一个硬盘。你这个方案如果用在我的电脑上,我机械硬盘的文件就会全部丢失。
而自动恢复系统简单一点,电脑可以有多个硬盘,但必须安装过且只能有一个操作系统。
作者: as8686886    时间: 2024-5-17 21:13
Su_jacc 发表于 2024-5-17 20:58
我的想法是自动安装操作系统,电脑必须要求只能有一个硬盘。你这个方案如果用在我的电脑上,我机械硬盘的 ...

旧机器好判断,可以用wimc命令获取磁盘列表然后手动选择
作者: mouse723    时间: 2024-5-17 21:18
驚為天人的神作,看了讓人熱血沸騰,感謝分享。
作者: as8686886    时间: 2024-5-17 22:13
Su_jacc 发表于 2024-5-17 20:58
我的想法是自动安装操作系统,电脑必须要求只能有一个硬盘。你这个方案如果用在我的电脑上,我机械硬盘的 ...

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

diskpart获取


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

论坛有个bjay2008xmy搞过一个U盘自动化恢复系统,有多个系统盘、无系统盘的情况下都不进行操作,基于数据安全的前提下,这个思路同样也可以用于安装全新系统。
无论是自动恢复还是自动安装系统,都必要基于数据安全的前提上,如果没有完善的解决办法,不如不做。
作者: hehuiying    时间: 2024-5-18 10:25
谢谢分享
作者: 2267981144    时间: 2024-5-18 11:53
感谢提供分享!
作者: ak47wa    时间: 2024-5-28 16:18
谢谢分享。
作者: j4tan    时间: 2024-8-28 22:41
学习一下,收藏了谢谢
作者: mr8246    时间: 2024-8-30 08:22
支持
作者: sshx    时间: 2024-9-1 13:48
我也写过类似的,不过没有 LZ 这么完善
作者: martin313    时间: 2024-9-1 13:51
邪恶海盗 发表于 2024-5-14 14:44
Ghost网克啊...

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

SSD 时代,还Ghost,晕

真是够折磨SSD的
作者: sshx    时间: 2024-9-1 14: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) 的方式来选择硬盘
作者: zmlxh168    时间: 2024-9-1 16:48
感谢分享!
作者: wn168cn@163.com    时间: 2024-10-18 13:18
感谢分享
作者: 2012slodt    时间: 2024-10-18 14:56
感谢
作者: shiqiang    时间: 2024-10-18 15:13
感谢分享。
作者: cqh    时间: 2024-11-12 15:29
学习




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3