无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: dos时代菜鸟
打印 上一主题 下一主题

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

  [复制链接]
121#
 楼主| 发表于 2022-11-7 14:00:48 | 只看该作者
cbg520 发表于 2022-11-7 10:17
很多pe的位置都不定

只要它是在 注册表里有痕迹的,就能找出来。如果是 本地 bcd 调用的,那 十有八九是没问题的。
回复

使用道具 举报

122#
发表于 2022-11-7 14:03:51 | 只看该作者
dos时代菜鸟 发表于 2022-11-7 13:59
这你得先做个窗口。控件设计到窗口里。

比如

_SUB wim_setup
    。。。。
    List List,L20T55W150H20,,
    。。。。。。
_END
然后把得到的%lx%赋值给List

点评

对,变量 跟 上,用 call 调用窗口 就行了。  详情 回复 发表于 2022-11-7 14:06
回复

使用道具 举报

123#
 楼主| 发表于 2022-11-7 14:05:57 | 只看该作者
本帖最后由 dos时代菜鸟 于 2022-11-7 14:08 编辑

特意弄了个 u盘,用 ultraiso 做了个pe 放进去,启动并没有出现 不能解析 reg 信息的问题,说明 reg 还是靠谱的。
那个分区 diskpart 是不能认成卷的,也就不能为其分配盘符,但是 pecmd show -check 指令可以强行为其分配上盘符。

我把注册表信息 改成不能识别,又把 对应分区卸载了,破迫使只能通过搜索来找,也是可以找到的。




回复

使用道具 举报

124#
 楼主| 发表于 2022-11-7 14:06:46 | 只看该作者

对,变量 跟 上,用 call 调用窗口 就行了。

点评

就是不知道怎么写呀,怎么不断的累加上去 @List=第一个%lx%|第二个%lx%|第三个%lx%|..........第N个%lx%  详情 回复 发表于 2022-11-7 14:35
回复

使用道具 举报

125#
发表于 2022-11-7 14:35:02 | 只看该作者
dos时代菜鸟 发表于 2022-11-7 14:06
对,变量 跟 上,用 call 调用窗口 就行了。

就是不知道怎么写呀,怎么不断的累加上去
@List=第一个%lx%|第二个%lx%|第三个%lx%|..........第N个%lx%

点评

就把下面一句话 放到窗口段sub 中。 List -h list名字, L左 T上 W宽度 H高度 ,事先包含了内容的变量,这个list变化时要做的动作。  详情 回复 发表于 2022-11-7 14:41
回复

使用道具 举报

126#
 楼主| 发表于 2022-11-7 14:41:12 | 只看该作者
本帖最后由 dos时代菜鸟 于 2022-11-7 14:43 编辑
D_M_GuYing 发表于 2022-11-7 14:35
就是不知道怎么写呀,怎么不断的累加上去
@List=第一个%lx%|第二个%lx%|第三个%lx%|..........第N个%lx%


就把下面一句话 放到窗口段sub 中。

List -h  list名字,        L左 T上  W宽度  H高度 ,事先包含了内容的变量,这个list变化时要做的动作
如:
envi list1=1|2|3|4|5|6
List -h  List_name1,        L10 T10  W100  H20 ,%list1%,Call xyz

点评

明白了,,原来是要在窗口 CALL,而且赋值后,List自动就加了 分隔符了 “|” [attachimg]511656[/attachimg] 浏览后CALL,空白处最先上去的是 2:PE外置程序,要是先显示 1:就OK了,谢谢了,这一阵跟你学了不少  详情 回复 发表于 2022-11-7 15:43
回复

使用道具 举报

127#
发表于 2022-11-7 15:43:14 | 只看该作者
本帖最后由 D_M_GuYing 于 2022-11-7 17:44 编辑
dos时代菜鸟 发表于 2022-11-7 14:41
就把下面一句话 放到窗口段sub 中。

List -h  list名字,        L左 T上  W宽度  H高度 ,事先包含了 ...

明白了,,原来是要在窗口 CALL,而且赋值后,List自动就加了 分隔符了 “|”


浏览后CALL,空白处最先上去的是 2:PE外置程序,要是先显示 1:就OK了,谢谢了,这一阵跟你学了不少

CALL @wim_setup
_SUB wim_setup,W385H480,%bb%,,%SystemRoot%\system32\shell32.dll#8
    ..........................
    List List7,L20T55W250H30 ,,Call gomoun
    Call Find_index
_END

_Sub Find_index
    exec* &mess1=*cmd /c  Dism /Get-ImageInfo  /ImageFile:"%WIMFILE%"
    forx *Nl mess1,lx,
    {
        mstr -delims::  item,value=<1><2>%lx%
        Find $%item%=索引, mstr -trim index=%value%
        Find $%item%=名称,
        {
          mstr -trim name=%value%
          envi @List7=%index%:%name%
        }
    }
_END

回复

使用道具 举报

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

使用道具 举报

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

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

点评

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

使用道具 举报

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
回复

使用道具 举报

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
回复

使用道具 举报

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

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

使用道具 举报

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
回复

使用道具 举报

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

是否在 卸载之列?

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


回复

使用道具 举报

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

是否在 卸载之列?

刚才忘记测试了

subj -F:
可以卸载掉

点评

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

使用道具 举报

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
回复

使用道具 举报

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
回复

使用道具 举报

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
回复

使用道具 举报

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
回复

使用道具 举报

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

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

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

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

这个就不好办了。

回复

使用道具 举报

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 这个命令有延迟?导致不能获取新加载的分区盘符?
可以添加两句话试试

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

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

使用道具 举报

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
回复

使用道具 举报

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

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

点评

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

使用道具 举报

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
回复

使用道具 举报

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
回复

使用道具 举报

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

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

使用道具 举报

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
回复

使用道具 举报

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

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

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

使用道具 举报

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

点评

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

使用道具 举报

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

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

点评

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

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-10 15:08

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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