无忧启动论坛

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

[发布] 确定当前pe 对应的 boot.wim 位置,基本解决

  [复制链接]
跳转到指定楼层
1#
发表于 2022-11-2 19:08:23 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 dos时代菜鸟 于 2022-11-7 08:28 编辑

如题,有啥办法能 获取到 当前 pe 是启动的 哪个位置的 哪一个 boot.wim ?


弄了个 pecmd 的脚本,用 pecmd.exe load 这个脚本,在pe下就能获取 到了,当然,一些特殊情况 可能还需要进一步测试,或许 无解。

特此鸣谢   D_M_GuYing  的辛勤测试


原理是读取 注册表 HKLM\SYSTEM\CurrentControlSet\Control\SystemStartOptions 的键值并通过 api 将其变成 人能看懂的 路径。

boot.wim.Path-2.81.7z (939.74 KB, 下载次数: 50)

为了避免 未分配盘符,可以 先运行盘符理顺脚本,把win 能识别的卷 统统挂载。

针对 cdrom 的情况,只能考虑 在多个 光驱中 按照boot.wim 的路径去找,找到的,就认定为是目标,此时如果有多个结果,取最后一个。一般情况下,光驱用的很少,大多是虚拟光驱启动pe ,光驱序列里面不会有两个一样的光盘内容,如果是一样的,也就无所谓选择哪一个了。

支持 vhd 的情况  
//优先采纳 wim 路径,vhd 路径次之。如果 都不具备搜索条件,out_path 变量为空。
上几个图:













156#
发表于 2023-4-16 08:31:16 | 只看该作者
#在这里快速回非常需要,感谢复#
回复

使用道具 举报

155#
发表于 2022-12-24 14:41:44 | 只看该作者
这个工个真好,谢谢
回复

使用道具 举报

154#
发表于 2022-11-27 14:38:58 | 只看该作者
正好需要下载来看看
回复

使用道具 举报

153#
发表于 2022-11-20 21:18:56 | 只看该作者
dos时代菜鸟 发表于 2022-11-20 20:59
这个 是可以的,关键是,你用这个 不就是要 进入脚本,获取脚本 得出的结论么?
脚本里面 都有引用的。 ...

谢谢,脚本我下载看了,已经实现了,因为我的pe和外置单独在一个隐藏分区中,所以不想给这个分区分配盘符,用上述路径可以配合pecmd挂载隐藏分区的外置,就不用分配盘符了
回复

使用道具 举报

152#
 楼主| 发表于 2022-11-20 20:59:50 | 只看该作者
泮安宁 发表于 2022-11-20 15:32
最后返回的路径里可不可以多加一项,在第几块硬盘的第几个分区,“\\?\Harddisk0Partition1”这种路径

这个 是可以的,关键是,你用这个 不就是要 进入脚本,获取脚本 得出的结论么?
脚本里面 都有引用的。显示在 窗口 很简单。

点评

谢谢,脚本我下载看了,已经实现了,因为我的pe和外置单独在一个隐藏分区中,所以不想给这个分区分配盘符,用上述路径可以配合pecmd挂载隐藏分区的外置,就不用分配盘符了  详情 回复 发表于 2022-11-20 21:18
回复

使用道具 举报

151#
发表于 2022-11-20 15:32:57 | 只看该作者
dos时代菜鸟 发表于 2022-11-20 13:24
可以,而且可以给分配盘符,
前提是 用 bcd 启动的,在注册表中 有 记录。

最后返回的路径里可不可以多加一项,在第几块硬盘的第几个分区,“\\?\Harddisk0Partition1”这种路径

点评

这个 是可以的,关键是,你用这个 不就是要 进入脚本,获取脚本 得出的结论么? 脚本里面 都有引用的。显示在 窗口 很简单。  详情 回复 发表于 2022-11-20 20:59
回复

使用道具 举报

150#
 楼主| 发表于 2022-11-20 13:24:40 | 只看该作者
泮安宁 发表于 2022-11-20 11:19
如果wim是在隐藏分区被启动的,不分配盘符的话,还能找出wim的位置吗

可以,而且可以给分配盘符,
前提是 用 bcd 启动的,在注册表中 有 记录。

点评

最后返回的路径里可不可以多加一项,在第几块硬盘的第几个分区,“\\?\Harddisk0Partition1”这种路径  详情 回复 发表于 2022-11-20 15:32
回复

使用道具 举报

149#
发表于 2022-11-20 11:19:10 | 只看该作者
如果wim是在隐藏分区被启动的,不分配盘符的话,还能找出wim的位置吗

点评

可以,而且可以给分配盘符, 前提是 用 bcd 启动的,在注册表中 有 记录。  详情 回复 发表于 2022-11-20 13:24
回复

使用道具 举报

148#
 楼主| 发表于 2022-11-10 08:11:08 | 只看该作者
D_M_GuYing 发表于 2022-11-10 07:21
我搜索光驱部分用的是FORM

       ifex '%&type1%'='cdrom',

我是用 part 找出 有盘符的光驱,也没几个,逐个判断下,效率上也不耽误。
回复

使用道具 举报

147#
发表于 2022-11-10 07:21:19 | 只看该作者
我搜索光驱部分用的是FORM

       ifex '%&type1%'='cdrom',
        {  
            FORX \Setup\安装WinPE.CMD,STPATH,0,
            {
                FDRV wzDrive=%STPATH%
                FORM DriveType=%wzDrive%
                FIND $%DriveType%=DRIVE_CDROM,ENVI wzPath=%wzDrive%WEPE\WEPE.INI
            }
        }

点评

我是用 part 找出 有盘符的光驱,也没几个,逐个判断下,效率上也不耽误。  详情 回复 发表于 2022-11-10 08:11
回复

使用道具 举报

146#
发表于 2022-11-9 14:59:58 | 只看该作者
dos时代菜鸟 发表于 2022-11-9 14:37
你这个就是取第一个空间盘符分配的
                    fdrv -idlec &drvs=*:
                    ms ...

哦,那我这个是用对了??
那就好
回复

使用道具 举报

145#
 楼主| 发表于 2022-11-9 14:37:17 | 只看该作者
D_M_GuYing 发表于 2022-11-9 13:24
很能感觉到你的心情,虽然一通儿的折腾,又被我凭空添了些不必要的麻烦,但最后解决或者解惑了,心情大好 ...

你这个就是取第一个空间盘符分配的
                    fdrv -idlec &drvs=*:
                    mstr &drvx=<1>%&drvs%
                    DISK %&drvx%,%&disk%,%&part%,1


如果是下面这个,就是用最后一个空闲盘符
                    fdrv -idlec &drvs=*:
                    mstr &drvx=<-1>%&drvs%
                   DISK %&drvx%,%&disk%,%&part%,1

紫色部分
                   DISK %&drvx%,%&disk%,%&part%,1
  DISK [变量名],硬盘号,分区号                                                               ┃
┃    │    │※"硬盘号"不为空值,"分区号"也不为空值时,根据"变量名"的格式按以下三种情况处理:            ┃
┃    │5.1 │  DISK   ,硬盘号,分区号                                                                     ┃
┃    │    │  1、"变量名"为空值时,则卸载该硬盘分区分配的盘符卷,见示例7;                              ┃
┃    │5.2 │  DISK 盘符卷,硬盘号,分区号,[功能号]                                                        ┃
┃    │    │  2、"变量名"为盘符卷时(如 E: 或 E:\),为硬盘分区分配指定的盘符卷,"功能号"省略或为0时,若为┃
┃    │    │  隐藏分区则不分配盘符卷,"功能号"为非0时不管是否为隐藏分区均分配盘符卷,见示例8;          ┃
┃    │5.3 │  DISK 变量名,硬盘号,分区号                                                                 ┃
┃    │    │  3、"变量名"不为空值,且不符合盘符形式时,将该分区的盘符赋值给指定的"变量名",见示例

点评

哦,那我这个是用对了?? 那就好  详情 回复 发表于 2022-11-9 14:59
回复

使用道具 举报

144#
发表于 2022-11-9 13:24:09 | 只看该作者
dos时代菜鸟 发表于 2022-11-9 12:39
没关系,从来也没怪你呀。哈哈哈。

很能感觉到你的心情,虽然一通儿的折腾,又被我凭空添了些不必要的麻烦,但最后解决或者解惑了,心情大好,跟喝了一壶老酒似的,,,

再最后麻烦一件事儿,我PECMD.INI中的红色部分,主要是我想要分配第一个可用盘符,但你的脚本分配的是最后一个可用盘符,不知道我这么改是否严谨,好象之前你说过,这个命令分配盘符,在有些特殊情况下,有点不靠谱。


我不是学这个专业的,PECMD.EXE全靠自己看着帮助慢慢的学,这阵儿子跟你学到了很多,再次感谢!!

_SUB FINDFZ
    REGI .HKLM\SYSTEM\CurrentControlSet\Control\SystemStartOptions,&sso
    forx * %&sso% ,&p0,
    {
        envi &&item0=
        mstr &&item0=0,7,%&p0%
        Find $"%&item0%"="RDPATH=" ,
        {
            mstr &p0=8,0,%&p0%            
            mstr -delims:\ value1=<1>%&p0%
        }
    }
    Find $"%value1%"<>"",
    {
        sed *ni &str2=0,[()0123456789], ,%value1%
        mstr &type1=<3>%&str2%%
        ifex '%&type1%'='cdrom',
        {  
            FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH%
            ENVI wzPath=%STPATH%\WEPE\WEPE.INI
        }!
        {  
            part -drv list volume  \ArcName\%value1%,&part_info
            ifex '%&part_info%'<>'',
            {  
                mstr &disk,&part,<r=<2><3><8>%&part_info%
                ENVI wzPath=%<r%\WEPE\WEPE.INI
                Find $"%<r%"="",
                {  
                    fdrv -idlec &drvs=*:
                    mstr &drvx=<1>%&drvs%
                    DISK %&drvx%,%&disk%,%&part%,1
                    ENVI wzPath=%&drvx%\WEPE\WEPE.INI
                }   
            }!
            {
                fdrv &drvs01=*
                sed &drvs1=0,[ ],,%&drvs01%
                show -check -1:-1,1
                fdrv &drvs2=*
                sed &drvs2=0,[%&drvs1%],,%&drvs2%
                call A_ltr
                forx * %RD% %FD%,&drvx1,
                {
                    ifex "%&drvx1%WEPE\WEPE.INI",
                    {
                        envi wzPath=%&drvx1%WEPE\WEPE.INI
                        sed &drvs2=0,[%&drvx1%],,%&drvs2%
                        exit forx
                    }
                }
                forx * %&drvs2%,&drvx1,subj -%&drvx1%:
                }
            }
        }
    }
_END

点评

你这个就是取第一个空间盘符分配的 fdrv -idlec &drvs=*: mstr &drvx=%&drvs% DISK %&drvx%,%&disk%,%&part%,1 如果是下面这个,就是用最后一  详情 回复 发表于 2022-11-9 14:37
回复

使用道具 举报

143#
 楼主| 发表于 2022-11-9 12:39:24 | 只看该作者
D_M_GuYing 发表于 2022-11-9 12:35
十分对不起,是我自己不够严谨,看在我一顿折腾的份上,原谅我吧
这回,好像咱们俩都不用再折腾了,基本上 ...

没关系,从来也没怪你呀。哈哈哈。

点评

很能感觉到你的心情,虽然一通儿的折腾,又让我凭空添了些不必要的麻烦,但最后解决或者解惑了,心情大好,跟喝了一壶老酒似的,,, 再最后麻烦一件事儿,我PECMD.INI中的红色部分,主要是我想要分配第一个可用  详情 回复 发表于 2022-11-9 13:24
回复

使用道具 举报

142#
发表于 2022-11-9 12:35:46 | 只看该作者
十分对不起,是我自己不够严谨,看在我一顿折腾的份上,原谅我吧
这回,好像咱们俩都不用再折腾了,基本上解决了所有问题,是我的PECMD.INI中,没有加上红色部分,SO SORRY!

                envi wzPath=%&drvx1%WEPE\WEPE.INI
                sed &drvs2=0,[%&drvx1%],,%&drvs2%
                exit forx
            }
        }
        envi mess1=%mess1%\n 卸载无需挂载的分区 [%&drvs2%]
        forx * %&drvs2%,&drvx1,subj -%&drvx1%:
    }

点评

没关系,从来也没怪你呀。哈哈哈。  详情 回复 发表于 2022-11-9 12:39
回复

使用道具 举报

141#
发表于 2022-11-9 12:16:22 | 只看该作者
本帖最后由 D_M_GuYing 于 2022-11-9 12:18 编辑
dos时代菜鸟 发表于 2022-11-9 11:27
难道 show -check -1:-1,1 这个命令有延迟?导致不能获取新加载的分区盘符?
可以添加两句话试试

加入后,启动到桌面前,如图

启动到桌面后,问题依旧
回复

使用道具 举报

140#
 楼主| 发表于 2022-11-9 11:56:22 | 只看该作者
D_M_GuYing 发表于 2022-11-9 11:33
不知道我上次的回复有没有表达清楚,再详细说下

我的PECMD.INI,查找外置就写搜索的那一部分,全部删 ...

我是说 资源管理器里不看到那个盘符,不代表那个分区没有盘符。

fdrv drvs=*
mess [%drvs%]
看有f盘么? 有可能是 另一个权限下给分配了 f 盘符,在 show 指令一折腾,给显示出来了。

这个就不好办了。

回复

使用道具 举报

139#
发表于 2022-11-9 11:33:56 | 只看该作者
dos时代菜鸟 发表于 2022-11-9 10:45
从图片看,esp 分区 是在 运行脚本前就 被挂载了的。进入脚本后,并没有挂载那个分区,自然也就不卸载了 ...

不知道我上次的回复有没有表达清楚,再详细说下

我的PECMD.INI,查找外置就写搜索的那一部分,全部删除,U启后,ESP分区,U启分区都没有分配,那就是说,PECMD.INI中,没有ESP分配的代码
加上了,再U启,就分配ESP了,当然,定位WIM所在分区的是U启分区
_SUB wz
                envi. mess1=%mess1%\n 无法解析注册表中的 boot.wim 路径,或该路径已丢失.尝试逆序轮询搜索.
                fdrv &drvs01=*
                sed &drvs1=0,[ ],,%&drvs01%
                show -check -1:-1,1
                fdrv &drvs2=*
                sed &drvs2=0,[%&drvs1%],,%&drvs2%
                envi mess1=%mess1%\n 新分配的盘符 [%&drvs2%]
               
                //按硬盘分区序列给已有盘符排序
                call A_ltr  //
                 .................................................
_END



_SUB A_ltr
......................
_END

点评

我是说 资源管理器里不看到那个盘符,不代表那个分区没有盘符。 fdrv drvs=* mess [%drvs%] 看有f盘么? 有可能是 另一个权限下给分配了 f 盘符,在 show 指令一折腾,给显示出来了。  详情 回复 发表于 2022-11-9 11:56
回复

使用道具 举报

138#
 楼主| 发表于 2022-11-9 11:27:47 | 只看该作者
本帖最后由 dos时代菜鸟 于 2022-11-9 11:29 编辑
D_M_GuYing 发表于 2022-11-9 11:03
这个问题我想过,也测试了,删除下面代码的时候,U启时,外置加不到,ESP,U启分区都没有分配,
加上下 ...

难道 show -check -1:-1,1 这个命令有延迟?导致不能获取新加载的分区盘符?
可以添加两句话试试

                envi. mess1=%mess1%\n 无法解析注册表中的 boot.wim 路径,或该路径已丢失.尝试逆序轮询搜索.
                fdrv &drvs01=*
                sed &drvs1=0,[ ],,%&drvs01%
                show -check -1:-1,1
                wait 1000
                fdrv &drvs2=*
                mess  手动打开我的电脑,看一下 是否有新的分区被加载了。\n[%&drvs1%] \n[%&drvs2%]

                sed &drvs2=0,[%&drvs1%],,%&drvs2%
                envi mess1=%mess1%\n 新分配的盘符 [%&drvs2%]
               
                //按硬盘分区序列给已有盘符排序
                call A_ltr
               
                envi mess1=%mess1%\n 分区盘符搜索序列 [%RD%][%FD%]
                forx * %RD% %FD%,&drvx1,

点评

加入后,启动到桌面前,如图 [attachimg]511789[/attachimg] 启动到桌面后,问题依旧  详情 回复 发表于 2022-11-9 12:16
回复

使用道具 举报

137#
发表于 2022-11-9 11:03:22 | 只看该作者
dos时代菜鸟 发表于 2022-11-9 10:45
从图片看,esp 分区 是在 运行脚本前就 被挂载了的。进入脚本后,并没有挂载那个分区,自然也就不卸载了 ...

这个问题我想过,也测试了,删除下面代码的时候,U启时,外置加不到,ESP,U启分区都没有分配,
加上下面代码后,就是上一个回复的图了,所以,排除了你说的可能

{ //未获取到 路径对应的硬盘/分区/盘符 信息
                envi. mess1=%mess1%\n 无法解析注册表中的 boot.wim 路径,或该路径已丢失.尝试逆序轮询搜索.
                fdrv &drvs01=*
                sed &drvs1=0,[ ],,%&drvs01%
                show -check -1:-1,1
                fdrv &drvs2=*
                sed &drvs2=0,[%&drvs1%],,%&drvs2%
                envi mess1=%mess1%\n 新分配的盘符 [%&drvs2%]
               
                //按硬盘分区序列给已有盘符排序
                call A_ltr
               
                envi mess1=%mess1%\n 分区盘符搜索序列 [%RD%][%FD%]
                forx * %RD% %FD%,&drvx1,
                ..............................................

点评

难道 show -check -1:-1,1 这个命令有延迟?导致不能获取新加载的分区盘符? 可以添加两句话试试 envi. mess1=%mess1%\n 无法解析注册表中的 boot.wim 路径,或该路径已丢失.尝试逆序轮询搜索.  详情 回复 发表于 2022-11-9 11:27
回复

使用道具 举报

136#
 楼主| 发表于 2022-11-9 10:45:01 | 只看该作者
D_M_GuYing 发表于 2022-11-9 10:28
刚才忘记测试了

subj -F:

从图片看,esp 分区 是在 运行脚本前就 被挂载了的。进入脚本后,并没有挂载那个分区,自然也就不卸载了呀。

这种情况,跟脚本没啥关系了。

点评

不知道我上次的回复有没有表达清楚,再详细说下 我的PECMD.INI,查找外置就写搜索的那一部分,全部删除,U启后,ESP分区,U启分区都没有分配,那就是说,PECMD.INI中,没有ESP分配的代码 加上了,再U启,就分配E  详情 回复 发表于 2022-11-9 11:33
这个问题我想过,也测试了,删除下面代码的时候,U启时,外置加不到,ESP,U启分区都没有分配, 加上下面代码后,就是上一个回复的图了,所以,排除了你说的可能 { //未获取到 路径对应的硬盘/分区/盘符 信息  详情 回复 发表于 2022-11-9 11:03
回复

使用道具 举报

135#
发表于 2022-11-9 10:28:20 | 只看该作者
dos时代菜鸟 发表于 2022-11-9 09:46
能看到 esp 分区 挂载到 哪个盘符了么?

是否在 卸载之列?

刚才忘记测试了

subj -F:
可以卸载掉

点评

从图片看,esp 分区 是在 运行脚本前就 被挂载了的。进入脚本后,并没有挂载那个分区,自然也就不卸载了呀。  详情 回复 发表于 2022-11-9 10:45
回复

使用道具 举报

134#
发表于 2022-11-9 10:14:05 | 只看该作者
dos时代菜鸟 发表于 2022-11-9 09:46
能看到 esp 分区 挂载到 哪个盘符了么?

是否在 卸载之列?

给分配了F盘,ESP分区只有引导文件,WEPE文件夹已删除
U启后


回复

使用道具 举报

133#
 楼主| 发表于 2022-11-9 09:46:20 | 只看该作者
本帖最后由 dos时代菜鸟 于 2022-11-9 09:47 编辑
D_M_GuYing 发表于 2022-11-9 09:12
没卸载掉,我怕是我ESP分区存在 WEPE\WEPE64.wim,已经删除了整个ESP\WEP文件夹
重新U启,ESP分区还是上 ...

能看到 esp 分区 挂载到 哪个盘符了么?

是否在 卸载之列?

如果用  pecmd subj -盘符: 的方式 能否卸载掉。怀疑这个分区 有多个不同权限下分配的盘符。

点评

刚才忘记测试了 subj -F: 可以卸载掉  详情 回复 发表于 2022-11-9 10:28
给分配了F盘,ESP分区只有引导文件,WEPE文件夹已删除 U启后 [attachimg]511784[/attachimg]  详情 回复 发表于 2022-11-9 10:14
回复

使用道具 举报

132#
发表于 2022-11-9 09:13:44 | 只看该作者
dos时代菜鸟 发表于 2022-11-9 08:24
有卸载环节呀,如果挂载的分区没有 目标,就再卸载掉。难道没有卸载掉?

但,定位是准确的,也没有显示MSR分区,,这已经很好了,不影响大局
回复

使用道具 举报

131#
发表于 2022-11-9 09:12:19 | 只看该作者
dos时代菜鸟 发表于 2022-11-9 08:24
有卸载环节呀,如果挂载的分区没有 目标,就再卸载掉。难道没有卸载掉?

没卸载掉,我怕是我ESP分区存在 WEPE\WEPE64.wim,已经删除了整个ESP\WEP文件夹
重新U启,ESP分区还是上去了

点评

能看到 esp 分区 挂载到 哪个盘符了么?  详情 回复 发表于 2022-11-9 09:46
回复

使用道具 举报

130#
 楼主| 发表于 2022-11-9 08:24:37 | 只看该作者
本帖最后由 dos时代菜鸟 于 2022-11-9 08:34 编辑
D_M_GuYing 发表于 2022-11-9 07:38
恭喜恭喜
最新版本,基本上完美了!

有卸载环节呀,如果挂载的分区没有 目标,就再卸载掉。难道没有卸载掉?


点评

但,定位是准确的,也没有显示MSR分区,,这已经很好了,不影响大局  详情 回复 发表于 2022-11-9 09:13
没卸载掉,我怕是我ESP分区存在 WEPE\WEPE64.wim,已经删除了整个ESP\WEP文件夹 重新U启,ESP分区还是上去了  详情 回复 发表于 2022-11-9 09:12
回复

使用道具 举报

129#
发表于 2022-11-9 07:38:57 | 只看该作者
恭喜恭喜
最新版本,基本上完美了!

U启后的定位非常准确了,只有一点小遗憾,还是把没用的ESP分区给分配盘符了(ESP里已经没有.WIM)

点评

有卸载环节呀,如果挂载的分区没有 目标,就再卸载掉。难道没有卸载掉?  详情 回复 发表于 2022-11-9 08:24
回复

使用道具 举报

128#
发表于 2022-11-7 19:30:43 | 只看该作者
找到了,
在搜索那里最后加个
ENVI @List7.isel=1
就选择第一个卷号了
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-11 21:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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