无忧启动论坛

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

[分享] 添加WIM启动项的BAT源码

[复制链接]
跳转到指定楼层
1#
发表于 2024-10-27 09:55:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mr8246 于 2024-10-27 16:23 编辑

@echo off
bcdedit /timeout 10
::等待时间10秒
for /f "delims={,} tokens=2" %%a in ('bcdedit /create /d "PE" -application osloader') do set Guid={%%a}
::用bdedit创建启动项,导出GUID序列号,赋值给变量Guid
bcdedit /set %Guid% device ramdisk="[d:]\boot\boot.wim,{ramdiskoptions}"
::启动设备
bcdedit /set %Guid% osdevice ramdisk="[d:]\boot\boot.wim,{ramdiskoptions}"
::系统启动设备(设置和启动设备一样就行)
bcdedit /set %Guid% locale zh-CN
::区域设置中国
bcdedit /set %Guid% systemroot \windows
::系统根目录
bcdedit /set %Guid% detecthal Yes
::检测HAL(硬件抽象层),如Yes(一般用于PE)
bcdedit /set %Guid% winpe Yes
::是否windows PE,如Yes(只有是PE时才需要此参数)
bcdedit /displayorder %Guid% -addlast
::设置启动项显示顺序为最后
bcdedit /create {ramdiskoptions}
::创建RAM磁盘选项
bcdedit /set {ramdiskoptions} ramdisksdidevice partition=d:
::设置RAM磁盘SDI设备
bcdedit /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
::设置RAM磁盘SDI路径




::绿色的,是需要用户自定义的,其它的随意
::紫色的,是注释,不删除也行,有的系统需要点右键,以管理员身份运行
2#
发表于 2024-10-27 10:14:06 | 只看该作者
没这么简单,需要先判断启动模式,这个批处理只是legacy启动,现在大多数电脑只支持UEFI启动,楼主继续完善。

点评

无需判断,将winload这行删了即可双启通用  详情 回复 发表于 2024-10-27 11:44
主要是自用比较方便,efi启动的把启动文件改下就行  详情 回复 发表于 2024-10-27 11:32
回复

使用道具 举报

3#
发表于 2024-10-27 10:41:07 | 只看该作者
没有看到   绿色的
回复

使用道具 举报

4#
 楼主| 发表于 2024-10-27 11:32:31 | 只看该作者
mrzhonghb 发表于 2024-10-27 10:14
没这么简单,需要先判断启动模式,这个批处理只是legacy启动,现在大多数电脑只支持UEFI启动,楼主继续完善 ...

主要是自用比较方便,efi启动的把启动文件改下就行

点评

此行删了即可  详情 回复 发表于 2024-10-27 11:43
回复

使用道具 举报

5#
发表于 2024-10-27 11:43:40 来自手机 | 只看该作者
mr8246 发表于 2024-10-27 11:32
主要是自用比较方便,efi启动的把启动文件改下就行

此行删了即可
回复

使用道具 举报

6#
发表于 2024-10-27 11:44:38 来自手机 | 只看该作者
mrzhonghb 发表于 2024-10-27 10:14
没这么简单,需要先判断启动模式,这个批处理只是legacy启动,现在大多数电脑只支持UEFI启动,楼主继续完善 ...

无需判断,将winload这行删了即可双启通用

点评

mbr磁盘的系统,使用搜索那个可以 bcdedit.exe /set {current} device locate=\Windows\System32\winload.exe bcdedit.exe /set {current} osdevice locate=\Windows\System32\winload.exe bcdedit.exe /deleteva  详情 回复 发表于 2024-10-28 14:47
试过了,确实可以,efi没试  详情 回复 发表于 2024-10-27 13:16
回复

使用道具 举报

7#
发表于 2024-10-27 12:00:06 | 只看该作者
赞赞
回复

使用道具 举报

8#
 楼主| 发表于 2024-10-27 13:16:52 | 只看该作者
szwp 发表于 2024-10-27 11:44
无需判断,将winload这行删了即可双启通用

试过了,确实可以,efi没试

点评

guid可自定义,双启统一  详情 回复 发表于 2024-10-27 14:32
回复

使用道具 举报

9#
发表于 2024-10-27 13:22:26 | 只看该作者
多谢高手指点
回复

使用道具 举报

10#
发表于 2024-10-27 14:08:58 | 只看该作者
来学习了
回复

使用道具 举报

11#
发表于 2024-10-27 14:32:22 来自手机 | 只看该作者
mr8246 发表于 2024-10-27 13:16
试过了,确实可以,efi没试

guid可自定义,双启统一
回复

使用道具 举报

12#
发表于 2024-10-27 14:58:29 | 只看该作者
谢谢分享!
回复

使用道具 举报

13#
发表于 2024-10-27 15:31:07 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

14#
发表于 2024-10-27 16:23:03 来自手机 | 只看该作者
感谢分享
回复

使用道具 举报

15#
发表于 2024-10-27 17:10:27 | 只看该作者
感谢分享好东东
回复

使用道具 举报

16#
发表于 2024-10-28 12:38:39 | 只看该作者
多谢楼主的分享
回复

使用道具 举报

17#
发表于 2024-10-28 14:47:01 | 只看该作者
本帖最后由 freesoft00 于 2024-10-28 14:48 编辑
szwp 发表于 2024-10-27 11:44
无需判断,将winload这行删了即可双启通用

mbr磁盘的系统,使用搜索那个可以
bcdedit.exe /set {current} device locate=\Windows\System32\winload.exe
bcdedit.exe /set {current} osdevice locate=\Windows\System32\winload.exe
bcdedit.exe /deletevalue {bootmgr} device
bcdedit.exe /deletevalue {bootmgr} path
(后2句好像不对并不能删除)

但是这个语句用在gpt磁盘的系统上就会使系统无法启动。不知是没有设置对还是这个确实只针对bios而不能应用在uefi中
========================================================
也有可能是我这一套代码没有针对uefi做处理,\Windows\System32\winload.exe这个应该改一下,回头我再试试

点评

http://bbs.wuyou.net/forum.php?mod=redirect&goto=findpost&ptid=443140&pid=5464501&fromuid=225195  详情 回复 发表于 2024-10-28 15:17
回复

使用道具 举报

18#
发表于 2024-10-28 15:17:32 | 只看该作者
freesoft00 发表于 2024-10-28 14:47
mbr磁盘的系统,使用搜索那个可以
bcdedit.exe /set {current} device locate=\Windows\System32\winloa ...

http://bbs.wuyou.net/forum.php?m ... &fromuid=225195
回复

使用道具 举报

19#
发表于 2024-10-29 17:31:18 | 只看该作者
学习
回复

使用道具 举报

20#
发表于 2024-10-29 20:12:25 | 只看该作者
   set src=%1
   if %1.==. set /p src=请将pe的wim文件拖放到本窗口后按回车键:
   for %%a in (%src%) do (set NX=%%~nxa)
   echo !NX!&pause
   for /f "tokens=1*" %%c in ('Dism.exe /Get-ImageInfo /ImageFile:%src% /Index:1') do (
                     if /i "%%c"=="名称:" (set wim_name=%%d)
                    )
   mountvol R: /S
   dir R:\
   if not exist R:\Sources md R:\Sources 1>nul 2>nul
   copy /y %src%  R:\Sources
   BCDEdit /enum {ramdiskoptions} /v >nul 2>nul
   IF errorlevel 1  (
      xcopy /yhie  boot.sdi R:\EFI
      bcdedit /create {ramdiskoptions} 1>nul 2>nul
      bcdedit /set {ramdiskoptions} ramdisksdidevice "boot" 1>nul 2>nul
      bcdedit /set {ramdiskoptions} ramdisksdipath \EFI\boot.sdi 1>nul 2>nul
      )
   mountvol R: /D
   for /f "delims={,} tokens=2" %%a in ('bcdedit -create /d "%wim_name%" -application osloader  ') do set ID={%%a}
   bcdedit /set %ID% device ramdisk="[boot]\Sources\%NX%,{ramdiskoptions}"
   bcdedit /set %ID% osdevice ramdisk="[boot]\Sources\%NX%,{ramdiskoptions}"
   bcdedit /set %ID% path \windows\system32\boot\winload.efi
   bcdedit /set %ID% locale zh-CN 1>nul 2>nul
   bcdedit /set %ID% systemroot \windows 1>nul 2>nul
   bcdedit /set %ID% detecthal yes 1>nul 2>nul
   bcdedit /set %ID% winpe yes 1>nul 2>nul
   bcdedit /set %ID% bootmenupolicy Legacy 1>nul 2>nul
   bcdedit /displayorder %ID% -addlast 1>nul 2>nul
   echo !src! OK
   Pause>nul
   exit
回复

使用道具 举报

21#
发表于 2024-11-1 16:33:52 | 只看该作者
多谢楼主的分享
回复

使用道具 举报

22#
发表于 2024-11-1 20:04:03 | 只看该作者
借花献佛,修改一下:
  1. @echo off
  2. bcdedit /timeout 10
  3. ::等待时间10秒
  4. bcdedit /create {ramdiskoptions}
  5. ::创建RAM磁盘选项
  6. bcdedit /set {ramdiskoptions} ramdisksdidevice partition=D:
  7. ::设置RAM磁盘镜像所在分区
  8. bcdedit /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
  9. ::设置RAM磁盘SDI路径
  10. for /f "delims={,} tokens=2" %%a in ('bcdedit /create /d "PE" -application osloader') do set Guid={%%a}
  11. ::用bdedit创建启动项,导出GUID序列号,赋值给变量Guid
  12. bcdedit /set %Guid% device ramdisk="[D:]\boot\boot.wim,{ramdiskoptions}"
  13. ::启动设备
  14. bcdedit /set %Guid% osdevice ramdisk="[D:]\boot\boot.wim,{ramdiskoptions}"
  15. ::系统启动设备(设置和启动设备一样就行)
  16. bcdedit /set %Guid% locale zh-CN
  17. ::区域设置中国
  18. bcdedit /set %Guid% systemroot \windows
  19. ::系统根目录
  20. bcdedit /set %Guid% detecthal Yes
  21. ::检测HAL(硬件抽象层),如Yes(一般用于PE)
  22. bcdedit /set %Guid% winpe Yes
  23. ::是否windows PE,如Yes(只有是PE时才需要此参数)
  24. bcdedit /displayorder %Guid% -addlast
  25. ::把创建的项目添加到启动列表。如果不添加,替换成此命令就是一次性启动 bcdedit /bootsequence %Guid%


  26. ::绿色的,是需要用户自定义的,其它的随意
  27. ::紫色的,是注释,不删除也行,有的系统需要点右键,以管理员身份运行
复制代码

点评

可以👍  详情 回复 发表于 2024-11-1 20:52
回复

使用道具 举报

23#
 楼主| 发表于 2024-11-1 20:52:43 | 只看该作者
本帖最后由 mr8246 于 2024-11-1 20:57 编辑

欢迎批评指正
回复

使用道具 举报

24#
发表于 6 天前 | 只看该作者
学习一下思路
回复

使用道具 举报

25#
发表于 5 天前 | 只看该作者
一般俺不用 {ramdiskoptions},不影响系统原有的,另外新建sdi项。

点评

也可以  详情 回复 发表于 4 天前
回复

使用道具 举报

26#
 楼主| 发表于 4 天前 | 只看该作者
szwp 发表于 2024-11-5 08:14
一般俺不用 {ramdiskoptions},不影响系统原有的,另外新建sdi项。

也可以
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-10 00:15

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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