无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 5640|回复: 56
打印 上一主题 下一主题

[已解决] 求教:获取 bcdedit 执行结果字符串命令。

  [复制链接]
跳转到指定楼层
1#
发表于 2022-3-27 18:11:05 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 lhc0688 于 2022-5-9 00:28 编辑

执行如下命令

bcdedit /copy {default} /d "Boot from WIM"

会返回结果 “已将该项成功复制到 {d355b3a4-ad8c-11ec-b338-b3781ffaf120}。”(不含引号)

现在希望获取  {d355b3a4-ad8c-11ec-b338-b3781ffaf120} 到变量,想请教坛内高手,批处理代码应该怎么写?

想法大致为:

1、能否直接把bcdedit /copy {default} /d "Boot from WIM"  命令执行结果传给变量?

比如:

for /F %%i in (bcdedit /copy {default} /d "Boot from WIM") do (set commitid=%%i)  (测试执行出错!)

2、通过输出到文本tt.txt,再获取:

比如:

bcdedit /copy {default} /d "Boot from WIM" > tt.txt
set guid_tmp = type tt.txt:~-3,-38%  (截取倒数第3位开始38位)   (语法有错误,不会写。。。)

请高手指点,先谢!
50#
发表于 2022-4-2 11:30:46 来自手机 | 只看该作者
关于id为什么一定要去获取?自己编一个id再bcdedit
回复

使用道具 举报

49#
发表于 2022-4-2 11:26:41 来自手机 | 只看该作者
esp分区批处理命令直接打开不比挂载好?
回复

使用道具 举报

48#
发表于 2022-4-2 11:24:58 来自手机 | 只看该作者
搞不懂是要自动化还是手动?
回复

使用道具 举报

47#
发表于 2022-4-2 11:18:07 | 只看该作者
需求是挂载么?这个路绕得远了。
回复

使用道具 举报

46#
发表于 2022-4-2 11:06:09 来自手机 | 只看该作者
liuzhaoyzz 发表于 2022-4-2 10:51
问题是我不是这个需求啊,比如我想挂载ESP分区之后,向里面拷贝文件grub2x64.efi,boot.sdi等等之类的 ...

boot.sdi可以在任意位置,这又不是个问题,
回复

使用道具 举报

45#
发表于 2022-4-2 10:59:41 | 只看该作者
liuzhaoyzz 发表于 2022-4-2 10:51
问题是我不是这个需求啊,比如我想挂载ESP分区之后,向里面拷贝文件grub2x64.efi,boot.sdi等等之类的 ...

可用BCDBOOT实现
回复

使用道具 举报

44#
发表于 2022-4-2 10:59:11 | 只看该作者
本帖最后由 dfw9 于 2022-4-2 11:00 编辑
liuzhaoyzz 发表于 2022-4-2 10:51
问题是我不是这个需求啊,比如我想挂载ESP分区之后,向里面拷贝文件grub2x64.efi,boot.sdi等等之类的 ...

或许有人可以往ESP里直接塞入wim、vhd呢?
回复

使用道具 举报

43#
发表于 2022-4-2 10:51:23 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-4-2 10:57 编辑
江南一根葱 发表于 2022-4-2 09:54
我试了下,记得你是只从硬盘启动pe的
如果从硬盘启动pe,不管是bios还是uefi
bcdedit直接可以对硬盘里 ...
bcdedit直接可以对硬盘里的bcd进行操作

问题是我不是这个需求啊,比如我想挂载ESP分区之后,向里面拷贝文件grub2x64.efi,boot.sdi等等之类的,并非仅仅局限于修改BCD。

启动PE.WIM,还需要boot.sdi啊,就算bcdedit直接可以改硬盘里的bcd,不拷贝boot.sdi的话光改好了bcd也没用啊。
回复

使用道具 举报

42#
发表于 2022-4-2 10:01:08 | 只看该作者
szwp 发表于 2022-3-31 10:40
离线的话,最好在空盘时就合理规划好分区,4T以下还是MBR方式兼容双启,独立引导区+通用BCD,安装系统前就 ...

我也觉得不如找得到就全给加上
不然引导也可能在vhd上, 更可能在隔壁老王家
这引导关系变得永远说不清道不明了
回复

使用道具 举报

41#
发表于 2022-4-2 09:54:43 | 只看该作者
liuzhaoyzz 发表于 2022-3-31 13:32
我的系统都是vhd,我就是有这个命令行挂载ESP分区写文件的需求。不是抬杠。

我试了下,记得你是只从硬盘启动pe的
如果从硬盘启动pe,不管是bios还是uefi
bcdedit直接可以对硬盘里的bcd进行操作,根本无须查找,pe好像知道它是从哪里启动的
也可以直接像正常系统里一样添加引导,无须-store指定路径,也无须满地查找它是从哪里启动的,
回复

使用道具 举报

40#
发表于 2022-4-1 06:22:57 来自手机 | 只看该作者
smss 发表于 2022-3-27 19:20

bcdedit /copy /d "boot from wim" > temp.txt
for /f "delims={} tokens=2" %%i in (temp.txt) do set ID={%%i}
然后ID这个变量里就有了ID(带花括号。)
回复

使用道具 举报

39#
发表于 2022-3-31 15:22:38 | 只看该作者
liuzhaoyzz 发表于 2022-3-31 13:32
我的系统都是vhd,我就是有这个命令行挂载ESP分区写文件的需求。不是抬杠。

如果是微软方式引导的VHD系统 ,不用担心BCDEDIT和BCDBOOT找不到引导区,即使是VHD RAMOS。
回复

使用道具 举报

38#
发表于 2022-3-31 13:32:38 | 只看该作者
江南一根葱 发表于 2022-3-31 09:47
都vhd系统了,你不会在这种应用场景使用这种批处理的
所以,这可能就是抬杠,

我的系统都是vhd,我就是有这个命令行挂载ESP分区写文件的需求。不是抬杠。
回复

使用道具 举报

37#
发表于 2022-3-31 13:20:15 | 只看该作者
liuzhaoyzz 发表于 2022-3-31 09:09
这个思路不对。
并非所有的系统存在于物理硬盘上,有的系统存在于虚拟硬盘上面,比如vhd上面,vhd没有挂 ...

vhd 的话
如果是第三方引导器 引导 vhd 中的 bcd 启动vhd 中的系统,那就没必要 用 这样的搜索了。

但通常 我都是用  微软的 bootmgr /bootmgfw.efi 之类的 直接引导 硬盘上的 bcd 引导硬盘上的 vhd ,启动 vhd 中的系统。

而更多的时候,是 把系统安装在 正常的硬盘分区上,因为 这样可以 有休眠功能。
回复

使用道具 举报

36#
发表于 2022-3-31 13:14:45 | 只看该作者
江南一根葱 发表于 2022-3-31 09:50
我目前用的逻辑是搜索所有分区,存在boot\bcd写入传统bios引导项
存在efi\microsoft\boot\bcd就写入uefi ...

貌似所有的 cmd 命令 都自持
类似 这样  \\?\Volume{7f92197b-0000-0000-0000-100000000000}\
的 卷路径
回复

使用道具 举报

35#
发表于 2022-3-31 12:20:16 | 只看该作者
wang@qq.com 发表于 2022-3-31 11:42
我这里有33#--szwp提供的打开(无挂载点)分区的批处理,可以参考一下欢迎进QQ:1067888280群讨论引导

这不是处理当前系统添加WIMPE用的。不需要打开分区。
这不是俺写的,是另一种场景提供的一种思路。
回复

使用道具 举报

34#
发表于 2022-3-31 11:42:55 | 只看该作者
本帖最后由 wang@qq.com 于 2022-3-31 11:45 编辑

我这里有33#--szwp提供的打开(无挂载点)分区的批处理,可以参考一下欢迎进QQ:1067888280群讨论引导

打开esp.cmd.txt

433 Bytes, 下载次数: 4, 下载积分: 无忧币 -2

回复

使用道具 举报

33#
发表于 2022-3-31 10:40:05 | 只看该作者
离线的话,最好在空盘时就合理规划好分区,4T以下还是MBR方式兼容双启,独立引导区+通用BCD,安装系统前就将PE放上去,然后脱离U盘或网启,用本地硬盘继续剩余的活。
即使老机不支持UEFI,也要考虑将来硬盘可能会在新机上用。

如果已有系统,再离线安装PE,情况就比较复杂,会有多引导区存在,没法知道以后用户会用哪个引导区,会不会切换启动,要么全给加上,要么判断log最近日期找最后引导的区。
回复

使用道具 举报

32#
发表于 2022-3-31 10:30:33 | 只看该作者
szwp 发表于 2022-3-31 10:21
双启也是独立引导区为好,有群友MBR引导区ID设为1B未成功\\?方式,在当前系统中安装WIMPE还是BCDBOOT+BCD ...

当前系统安装那肯定了,不需要考虑什么多硬盘之类的情况
回复

使用道具 举报

31#
发表于 2022-3-31 10:30:08 | 只看该作者
江南一根葱 发表于 2022-3-31 10:29
pe是传统bios,离线系统是uefi,或者反之,这种情况是很常见的,我平时也是uefi的pe,传统bios启动的离线
...

前提是当前系统下安装WIMPE。
回复

使用道具 举报

30#
发表于 2022-3-31 10:29:30 | 只看该作者
szwp 发表于 2022-3-31 10:26
BCDBOOT会判断引导模式,不需要自己判断。
BCDEDIT会找到正确的BCD。

pe是传统bios,离线系统是uefi,或者反之,这种情况是很常见的,我平时也是uefi的pe,传统bios启动的离线
bcdboot不知道能不能判断

点评

前提是当前系统下安装WIMPE。  详情 回复 发表于 2022-3-31 10:30
回复

使用道具 举报

29#
发表于 2022-3-31 10:26:34 | 只看该作者
BCDBOOT会判断引导模式,不需要自己判断。
BCDEDIT会找到正确的BCD。

点评

pe是传统bios,离线系统是uefi,或者反之,这种情况是很常见的,我平时也是uefi的pe,传统bios启动的离线 bcdboot不知道能不能判断  详情 回复 发表于 2022-3-31 10:29
回复

使用道具 举报

28#
发表于 2022-3-31 10:21:18 | 只看该作者
江南一根葱 发表于 2022-3-31 09:50
我目前用的逻辑是搜索所有分区,存在boot\bcd写入传统bios引导项
存在efi\microsoft\boot\bcd就写入uefi ...

双启也是独立引导区为好,有群友MBR引导区ID设为1B未成功\\?方式,在当前系统中安装WIMPE还是BCDBOOT+BCDEDIT靠谱,不用查找引导区,不用挂载。

以上是微软引导方式,VHD也没问题,第三方引导的就去第三方里加PE吧。

点评

当前系统安装那肯定了,不需要考虑什么多硬盘之类的情况  详情 回复 发表于 2022-3-31 10:30
回复

使用道具 举报

27#
发表于 2022-3-31 09:50:04 | 只看该作者
dos时代菜鸟 发表于 2022-3-30 22:13
可以考虑 搜索所有分区中的系统,读取他们注册表指定位置,确定其最后一次启动该系统的BCD所在分区,然后 ...

我目前用的逻辑是搜索所有分区,存在boot\bcd写入传统bios引导项
存在efi\microsoft\boot\bcd就写入uefi引导项
bcdedit支持 \\?\Volume{7f92197b-0000-0000-0000-100000000000}\ 这种路径,并不需要挂载

点评

貌似所有的 cmd 命令 都自持 类似 这样 \\?\Volume{7f92197b-0000-0000-0000-100000000000}\ 的 卷路径  详情 回复 发表于 2022-3-31 13:14
双启也是独立引导区为好,有群友MBR引导区ID设为1B未成功\\?方式,在当前系统中安装WIMPE还是BCDBOOT+BCDEDIT靠谱,不用查找引导区,不用挂载。 以上是微软引导方式,VHD也没问题,第三方引导的就去第三方里加PE  详情 回复 发表于 2022-3-31 10:21
回复

使用道具 举报

26#
发表于 2022-3-31 09:47:43 | 只看该作者
liuzhaoyzz 发表于 2022-3-31 09:09
这个思路不对。
并非所有的系统存在于物理硬盘上,有的系统存在于虚拟硬盘上面,比如vhd上面,vhd没有挂 ...

都vhd系统了,你不会在这种应用场景使用这种批处理的
所以,这可能就是抬杠,

点评

我的系统都是vhd,我就是有这个命令行挂载ESP分区写文件的需求。不是抬杠。  详情 回复 发表于 2022-3-31 13:32
回复

使用道具 举报

25#
发表于 2022-3-31 09:09:00 | 只看该作者
本帖最后由 liuzhaoyzz 于 2022-3-31 09:12 编辑
dos时代菜鸟 发表于 2022-3-30 22:13
可以考虑 搜索所有分区中的系统,读取他们注册表指定位置,确定其最后一次启动该系统的BCD所在分区,然后 ...

这个思路不对。
并非所有的系统存在于物理硬盘上,有的系统存在于虚拟硬盘上面,比如vhd上面,vhd没有挂载,何谈BCD?何谈搜索?
ESP分区挂载与BCD没有必然的联系,本身就可以单独挂载。
对于裸机系统,从PE启动的,也是没有有效的BCD。比如在PE下面我想挂载ESP分区怎么办?
这不是抬杠,这是使用的场景不同,由此决定了需求不同。

点评

都vhd系统了,你不会在这种应用场景使用这种批处理的 所以,这可能就是抬杠,  详情 回复 发表于 2022-3-31 09:47
回复

使用道具 举报

24#
发表于 2022-3-30 22:13:58 来自手机 | 只看该作者
liuzhaoyzz 发表于 2022-3-30 18:31
mountvol Z: /s是比较差劲儿的办法。
多硬盘怎么办?比如说当前已经是优盘、本地硬盘启动了,我挂载另一 ...

可以考虑 搜索所有分区中的系统,读取他们注册表指定位置,确定其最后一次启动该系统的BCD所在分区,然后 找到这个BCD,读取其信息。

点评

我目前用的逻辑是搜索所有分区,存在boot\bcd写入传统bios引导项 存在efi\microsoft\boot\bcd就写入uefi引导项 bcdedit支持 \\?\Volume{7f92197b-0000-0000-0000-100000000000}\ 这种路径,并不需要挂载  详情 回复 发表于 2022-3-31 09:50
这个思路不对。 并非所有的系统存在于物理硬盘上,有的系统存在于虚拟硬盘上面,比如vhd上面,vhd没有挂载,何谈BCD?何谈搜索? ESP分区挂载与BCD没有必然的联系,本身就可以单独挂载。 对于裸机系统,从PE启动  详情 回复 发表于 2022-3-31 09:09
回复

使用道具 举报

23#
发表于 2022-3-30 21:27:33 来自手机 | 只看该作者
江南一根葱 发表于 2022-3-30 13:40
是虚拟机iso启动的,离线系统是uefi的win7

了解,
我也试试
回复

使用道具 举报

22#
发表于 2022-3-30 18:31:00 来自手机 | 只看该作者
lhc0688 发表于 2022-3-27 20:42
试了下,好像真的可以!难道就这么简单吗?
看论坛相关帖子都好像非常复杂,为何有直接挂载的命令不用呢 ...

mountvol Z: /s是比较差劲儿的办法。
多硬盘怎么办?比如说当前已经是优盘、本地硬盘启动了,我挂载另一个本地硬盘esp分区怎么办?
多个esp分区怎么办?
非微软体系的引导器引导的情况下怎么办?
BIOS引导的情况下挂载另一个GPT硬盘的ESP分区怎么办?

点评

可以考虑 搜索所有分区中的系统,读取他们注册表指定位置,确定其最后一次启动该系统的BCD所在分区,然后 找到这个BCD,读取其信息。  详情 回复 发表于 2022-3-30 22:13
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-9-22 09:13

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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