dos时代菜鸟
发表于 2022-11-7 14:00:48
cbg520 发表于 2022-11-7 10:17
很多pe的位置都不定
只要它是在 注册表里有痕迹的,就能找出来。如果是 本地 bcd 调用的,那 十有八九是没问题的。
D_M_GuYing
发表于 2022-11-7 14:03:51
dos时代菜鸟 发表于 2022-11-7 13:59
这你得先做个窗口。控件设计到窗口里。
比如
_SUB wim_setup
。。。。
List List,L20T55W150H20,,
。。。。。。
_END
然后把得到的%lx%赋值给List
dos时代菜鸟
发表于 2022-11-7 14:05:57
本帖最后由 dos时代菜鸟 于 2022-11-7 14:08 编辑
特意弄了个 u盘,用 ultraiso 做了个pe 放进去,启动并没有出现 不能解析 reg 信息的问题,说明 reg 还是靠谱的。
那个分区 diskpart 是不能认成卷的,也就不能为其分配盘符,但是 pecmd show -check 指令可以强行为其分配上盘符。
我把注册表信息 改成不能识别,又把 对应分区卸载了,破迫使只能通过搜索来找,也是可以找到的。
dos时代菜鸟
发表于 2022-11-7 14:06:46
D_M_GuYing 发表于 2022-11-7 14:03
比如
_SUB wim_setup
对,变量 跟 上,用 call 调用窗口 就行了。
D_M_GuYing
发表于 2022-11-7 14:35:02
dos时代菜鸟 发表于 2022-11-7 14:06
对,变量 跟 上,用 call 调用窗口 就行了。
就是不知道怎么写呀,怎么不断的累加上去
@List=第一个%lx%|第二个%lx%|第三个%lx%|..........第N个%lx%
dos时代菜鸟
发表于 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 -hlist名字, L左 T上W宽度H高度 ,事先包含了内容的变量,这个list变化时要做的动作
如:
envi list1=1|2|3|4|5|6
List -hList_name1, L10 T10W100H20 ,%list1%,Call xyz
D_M_GuYing
发表于 2022-11-7 15:43:14
本帖最后由 D_M_GuYing 于 2022-11-7 17:44 编辑
dos时代菜鸟 发表于 2022-11-7 14:41
就把下面一句话 放到窗口段sub 中。
List -hlist名字, 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 /cDism /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
D_M_GuYing
发表于 2022-11-7 19:30:43
找到了,
在搜索那里最后加个
ENVI @List7.isel=1
就选择第一个卷号了
D_M_GuYing
发表于 2022-11-9 07:38:57
恭喜恭喜
最新版本,基本上完美了!
U启后的定位非常准确了,只有一点小遗憾,还是把没用的ESP分区给分配盘符了(ESP里已经没有.WIM)
dos时代菜鸟
发表于 2022-11-9 08:24:37
本帖最后由 dos时代菜鸟 于 2022-11-9 08:34 编辑
D_M_GuYing 发表于 2022-11-9 07:38
恭喜恭喜
最新版本,基本上完美了!
有卸载环节呀,如果挂载的分区没有 目标,就再卸载掉。难道没有卸载掉?
D_M_GuYing
发表于 2022-11-9 09:12:19
dos时代菜鸟 发表于 2022-11-9 08:24
有卸载环节呀,如果挂载的分区没有 目标,就再卸载掉。难道没有卸载掉?
没卸载掉,我怕是我ESP分区存在 WEPE\WEPE64.wim,已经删除了整个ESP\WEP文件夹
重新U启,ESP分区还是上去了
D_M_GuYing
发表于 2022-11-9 09:13:44
dos时代菜鸟 发表于 2022-11-9 08:24
有卸载环节呀,如果挂载的分区没有 目标,就再卸载掉。难道没有卸载掉?
但,定位是准确的,也没有显示MSR分区,,这已经很好了,不影响大局
dos时代菜鸟
发表于 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 -盘符: 的方式 能否卸载掉。怀疑这个分区 有多个不同权限下分配的盘符。
D_M_GuYing
发表于 2022-11-9 10:14:05
dos时代菜鸟 发表于 2022-11-9 09:46
能看到 esp 分区 挂载到 哪个盘符了么?
是否在 卸载之列?
给分配了F盘,ESP分区只有引导文件,WEPE文件夹已删除
U启后
D_M_GuYing
发表于 2022-11-9 10:28:20
dos时代菜鸟 发表于 2022-11-9 09:46
能看到 esp 分区 挂载到 哪个盘符了么?
是否在 卸载之列?
刚才忘记测试了
subj -F:
可以卸载掉
dos时代菜鸟
发表于 2022-11-9 10:45:01
D_M_GuYing 发表于 2022-11-9 10:28
刚才忘记测试了
subj -F:
从图片看,esp 分区 是在 运行脚本前就 被挂载了的。进入脚本后,并没有挂载那个分区,自然也就不卸载了呀。
这种情况,跟脚本没啥关系了。
D_M_GuYing
发表于 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,
..............................................
dos时代菜鸟
发表于 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,
D_M_GuYing
发表于 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
dos时代菜鸟
发表于 2022-11-9 11:56:22
D_M_GuYing 发表于 2022-11-9 11:33
不知道我上次的回复有没有表达清楚,再详细说下
我的PECMD.INI,查找外置就写搜索的那一部分,全部删 ...
我是说 资源管理器里不看到那个盘符,不代表那个分区没有盘符。
fdrv drvs=*
mess [%drvs%]
看有f盘么? 有可能是 另一个权限下给分配了 f 盘符,在 show 指令一折腾,给显示出来了。
这个就不好办了。
D_M_GuYing
发表于 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 这个命令有延迟?导致不能获取新加载的分区盘符?
可以添加两句话试试
加入后,启动到桌面前,如图
启动到桌面后,问题依旧
D_M_GuYing
发表于 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%:
}
dos时代菜鸟
发表于 2022-11-9 12:39:24
D_M_GuYing 发表于 2022-11-9 12:35
十分对不起,是我自己不够严谨,看在我一顿折腾的份上,原谅我吧
这回,好像咱们俩都不用再折腾了,基本上 ...
没关系,从来也没怪你呀。哈哈哈。
D_M_GuYing
发表于 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
dos时代菜鸟
发表于 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、"变量名"不为空值,且不符合盘符形式时,将该分区的盘符赋值给指定的"变量名",见示例
D_M_GuYing
发表于 2022-11-9 14:59:58
dos时代菜鸟 发表于 2022-11-9 14:37
你这个就是取第一个空间盘符分配的
fdrv -idlec &drvs=*:
ms ...
哦,那我这个是用对了??
那就好
D_M_GuYing
发表于 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
}
}
dos时代菜鸟
发表于 2022-11-10 08:11:08
D_M_GuYing 发表于 2022-11-10 07:21
我搜索光驱部分用的是FORM
ifex '%&type1%'='cdrom',
我是用 part 找出 有盘符的光驱,也没几个,逐个判断下,效率上也不耽误。
泮安宁
发表于 2022-11-20 11:19:10
如果wim是在隐藏分区被启动的,不分配盘符的话,还能找出wim的位置吗
dos时代菜鸟
发表于 2022-11-20 13:24:40
泮安宁 发表于 2022-11-20 11:19
如果wim是在隐藏分区被启动的,不分配盘符的话,还能找出wim的位置吗
可以,而且可以给分配盘符,
前提是 用 bcd 启动的,在注册表中 有 记录。