无忧启动论坛

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

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

  [复制链接]
61#
发表于 2022-11-5 10:23:07 | 只看该作者
本帖最后由 D_M_GuYing 于 2022-11-5 11:23 编辑
dos时代菜鸟 发表于 2022-11-5 10:09
我通常都是先对所有识别分区分配盘符

这个就有点晕了,
新的PECMD.EXE单独运行,,也就是用x.cmd调用文件夹中的正确定位
可把新的PECMD.EXE放到PE内核启动后,调用SYSTEM32中的就又读不出来了,

点评

pe自带 pecmd 版本不够  详情 回复 发表于 2022-11-5 11:18
回复

使用道具 举报

62#
发表于 2022-11-5 10:51:25 | 只看该作者
本帖最后由 D_M_GuYing 于 2022-11-5 10:52 编辑
dos时代菜鸟 发表于 2022-11-5 10:09
我通常都是先对所有识别分区分配盘符

x.cmd 和x.ini放到SYSTEM32文件内,运行x.cmd可定位,可右键加载.INI就不行难到非要.CMD的一下,,如果测试加载.INI还是不行的的话,我就直接在PECMD.INI中调用X.CMD得了
回复

使用道具 举报

63#
发表于 2022-11-5 11:12:03 | 只看该作者

实机测试
硬盘ESP启动,
x.cmd加载boot.wim.drv-2.4.ini成功定位

UltraISO,隐藏启动分区模式写入U盘,U启后已经以我之前的方式分配了盘符
x.cmd加载boot.wim.drv-2.4.ini



回复

使用道具 举报

64#
 楼主| 发表于 2022-11-5 11:18:05 来自手机 | 只看该作者
D_M_GuYing 发表于 2022-11-5 10:23
这个就有点晕了,
新的PECMD.EXE单独运行,,也就是用x.cmd调用文件夹中的正确定位
可把它放到PE内核启 ...

pe自带 pecmd 版本不够

点评

我已经替换了你给的那个新的PECMD  详情 回复 发表于 2022-11-5 11:21
回复

使用道具 举报

65#
发表于 2022-11-5 11:21:20 | 只看该作者
dos时代菜鸟 发表于 2022-11-5 11:18
pe自带 pecmd 版本不够

我已经替换了你给的那个新的PECMD

点评

把 ini文件 拖动到 高版本 pecmd.exe 上,用高版本pecmd.exe 运行  详情 回复 发表于 2022-11-5 11:31
回复

使用道具 举报

66#
 楼主| 发表于 2022-11-5 11:31:59 来自手机 | 只看该作者
D_M_GuYing 发表于 2022-11-5 11:21
我已经替换了你给的那个新的PECMD

把 ini文件 拖动到 高版本 pecmd.exe 上,用高版本pecmd.exe 运行

点评

刚刚找到原因,,是我的原因, 是我安装DISMGUI时,把用右键.ini时PECMD运行指向DISMGUI文件夹内的Pe_cmd.exe了 不好意思哈 但U启测试,完完全全用的是X文件夹下的X.CMD.调用boot.wim.drv-2.4.ini,应该还是U盘  详情 回复 发表于 2022-11-5 12:00
回复

使用道具 举报

67#
发表于 2022-11-5 12:00:13 | 只看该作者
dos时代菜鸟 发表于 2022-11-5 11:31
把 ini文件 拖动到 高版本 pecmd.exe 上,用高版本pecmd.exe 运行

刚刚找到原因,,是我的原因,
是我安装DISMGUI时,把用右键.ini时PECMD运行指向DISMGUI文件夹内的Pe_cmd.exe了
不好意思哈

但U启测试,完完全全用的是X文件夹下的X.CMD.调用boot.wim.drv-2.4.ini,应该还是U盘相关的代码没完善
回复

使用道具 举报

68#
发表于 2022-11-5 15:01:45 | 只看该作者
弄到了PECMD.INI中了,就差红色的U启部分了,期待完善,我是没这水平,只能笨方法、

//查找并分配外置所在的隐藏分区
IFEX %ProgramFiles%\WEPE.INI,ENVI wzPath=%ProgramFiles%\WEPE.INI!CALL FINDFZ
FDIR wimPath=%wzPath%

_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%'='rdisk',
    {
        part -drv list volume  \ArcName\%value1%,&part_info
        ifex '%&part_info%'<>'',
        {  
            mstr &disk,&part,&ltr=<2><3><8>%&part_info%
            Find $"%&ltr%"="",
            {
                fdrv -idlec &drvs=*:
                mstr &drvx=<1>%&drvs%
                disk %&drvx%,%&disk%:%&part%,1
                envi out_path=%drvx%\WEPE
            }!
                {
                    envi out_path=%&ltr%\WEPE
                }
            ENVI wzPath=%out_path%\WEPE.INI
        }
        IFEX %wzPath%,!
        {
            DISK %&drvx%,%RDISK%,2,1
            ENVI wzPath=%&drvx%\WEPE\WEPE.INI
        }
    }!
        {
        FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH%
        ENVI wzPath=%STPATH%\WEPE\WEPE.INI
        }  
}
IFEX %wzPath%,!
{
    MOUN !\WEPE\WEPE.INI,X:\a,1
    FILE X:\a
    FORX !\WEPE\WEPE.INI,fPath,1,ENVI wzPath=%fPath%
}
    EXEC =!CMD /C echo envi wzPath=%wzPath% >%temp%\wzPath.ini
_END

点评

红色部分,不明何意,蓝色部分,注意把 : 改成, 试试  详情 回复 发表于 2022-11-5 17:17
[attachimg]511459[/attachimg] 更新了一下,放到 1楼  详情 回复 发表于 2022-11-5 15:40
回复

使用道具 举报

69#
 楼主| 发表于 2022-11-5 15:40:46 | 只看该作者
D_M_GuYing 发表于 2022-11-5 15:01
弄到了PECMD.INI中了,就差红色的U启部分了,期待完善,我是没这水平,只能笨方法、

//查找并分配外置所 ...



更新了一下,放到 1楼



点评

u启还是不成, 不过,你的diskpart外壳 2022.03.23 ver:1.27可以正确读出U盘信息 要不从这方面着手试试  详情 回复 发表于 2022-11-5 16:42
回复

使用道具 举报

70#
发表于 2022-11-5 16:42:52 | 只看该作者
dos时代菜鸟 发表于 2022-11-5 15:40
更新了一下,放到 1楼

u启还是不成,
不过,你的diskpart外壳 2022.03.23 ver:1.27可以正确读出U盘信息
要不从这方面着手试试

点评

u启,是个啥启动结构? 把u盘量产成光盘了?格式化模拟了?还是 boot.wim 放在u盘,用启动器通过 ntload 之类的启动的? 看下运行结果,才行。如果 reg 信息有,同时那个分区确实能够别 win 识别,就能够 挂载盘  详情 回复 发表于 2022-11-5 16:53
回复

使用道具 举报

71#
 楼主| 发表于 2022-11-5 16:53:28 | 只看该作者
D_M_GuYing 发表于 2022-11-5 16:42
u启还是不成,
不过,你的diskpart外壳 2022.03.23 ver:1.27可以正确读出U盘信息
要不从这方面着手试试

u启,是个啥启动结构?
把u盘量产成光盘了?格式化模拟了?还是 boot.wim 放在u盘,用启动器通过 ntload 之类的启动的?

看下运行结果,才行。如果 reg 信息有,同时那个分区确实能够别 win 识别,就能够 挂载盘符,或者 你用个diskpart 分配个盘符,在试试呗。diskpart 识别出的分区是个啥情况?

点评

用UltraISO,写入硬盘映像......,启动分区设置的隐藏 [attachimg]511467[/attachimg]  详情 回复 发表于 2022-11-5 17:42
回复

使用道具 举报

72#
 楼主| 发表于 2022-11-5 17:17:30 | 只看该作者
本帖最后由 dos时代菜鸟 于 2022-11-5 17:33 编辑
D_M_GuYing 发表于 2022-11-5 15:01
弄到了PECMD.INI中了,就差红色的U启部分了,期待完善,我是没这水平,只能笨方法、

//查找并分配外置所 ...

-------------------------------------------------------------------------
_SUB FINDFZ
REGI .HKLM\SYSTEM\CurrentControlSet\Control\SystemStartOptions,&sso   //读取特定注册表位置

//循环找出注册表键值中各个以空格分隔的内容,如果有一段内容的前7个字符是 RDPATH= ,就获取该段信息中第八个字符后到第一个 “\”之前的部分,作为分区表达式存入变量 value1
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%"<>"",  //如果 value1 由内容
{
   //去除 value1 中 ()0123456789 这些字符后,取第三个单词
    sed *ni &str2=0,[()0123456789], ,%value1%
    mstr &type1=<3>%&str2%%
   // 如果 value1 的第三个单词 是 rdisk ,就尝试获取 value1 所代表的分区的信息
   ifex '%&type1%'='rdisk',
    {
       //获取 value1 所表达的分区的 信息
        part -drv list volume  \ArcName\%value1%,&part_info

        ifex '%&part_info%'<>'',  //如果获取到 value1 所表达的分区的信息  存入变量 &part_info
        {  
           //取 &part_info 的第2,3,8  三个单词,分别表示 这个分区 当前的 硬盘号,分区号,盘符
            mstr &disk,&part,&1ltr=<2><3><8>%&part_info%

            //如果 这个分区没有盘符,就找出当前第一个空闲盘符 挂载之,
           //并 把 "盘符:\wepe" 赋值给变量 out_path
            Find $"%&1ltr%"="",  
            {
                fdrv -idlec &drvs=*:
                mstr &drvx=<1>%&drvs%
                disk %&drvx%,%&disk%,%&part%,1
                envi out_path=%&drvx%\WEPE
            }!
            {
                envi out_path=%&1ltr%\WEPE
            }
            //赋值 wzpath内容 为 "盘符:\wepe\wepe.ini" 这个应该是个配置文件
            ENVI wzPath=%out_path%\WEPE.INI
        }
        //////////以下内容是何意?
        IFEX %wzPath%,!
        {
            DISK %&drvx%,%RDISK%,2,1
            ENVI wzPath=%&drvx%\WEPE\WEPE.INI
        }
       ///////////////////////////
    }!
    {  //如果通过注册表 不能定位配置文件 就运行 某个批处理搜索找到 配置文件。
        FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH%
        ENVI wzPath=%STPATH%\WEPE\WEPE.INI
    }  

}


IFEX %wzPath%,!
{
    MOUN !\WEPE\WEPE.INI,X:\a,1
    FILE X:\a
    FORX !\WEPE\WEPE.INI,fPath,1,ENVI wzPath=%fPath%
}
    EXEC =!CMD /C echo envi wzPath=%wzPath% >%temp%\wzPath.ini
_END
------------------------------------------------------------------------------------------------------------

红色部分,不明何意,蓝色部分,注意把   : 改成   , 试试

如下紫色部分 注意包括  }!
}!
    {  //如果通过注册表 不能定位配置文件 就运行 某个批处理搜索找到 配置文件。
        FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH%
        ENVI wzPath=%STPATH%\WEPE\WEPE.INI
    }  
改成:


}
ifex [! %wzPath%   |  '%wzPath%'=''],
{  //如果通过注册表 不能定位配置文件 ,或者定位的配置文件不存在,就运行 某个批处理搜索找到 配置文件。
        FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH%
        ENVI wzPath=%STPATH%\WEPE\WEPE.INI
}  

点评

IFEX %wzPath%,! { DISK %&drvx%,%RDISK%,2,1 ENVI wzPath=%&drvx%\WEPE\WEPE.INI } 就是我U启时分配盘符的笨方法, 注册表找到是 DISK %&drvx%,2,4,1挂不  详情 回复 发表于 2022-11-5 17:33
回复

使用道具 举报

73#
发表于 2022-11-5 17:33:05 | 只看该作者
dos时代菜鸟 发表于 2022-11-5 17:17
-------------------------------------------------------------------------
_SUB FINDFZ
REGI .HKLM ...

        IFEX %wzPath%,!
        {
            DISK %&drvx%,%RDISK%,2,1
            ENVI wzPath=%&drvx%\WEPE\WEPE.INI
        }

就是我U启时分配盘符的笨方法,
注册表找到是 DISK %&drvx%,2,4,1挂不上,
实际上是  DISK %&drvx%,2,2,1

点评

你说的那个pecmd 识别为 disk=2 part=4 的分区,diskpart 识别为设么了? 难道你的u盘分区 不规范?  详情 回复 发表于 2022-11-5 17:38
把红色部分删了 如下紫色部分 注意包括 }! }! { //如果通过注册表 不能定位配置文件 就运行 某个批处理搜索找到 配置文件。 FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH%  详情 回复 发表于 2022-11-5 17:36
回复

使用道具 举报

74#
 楼主| 发表于 2022-11-5 17:36:18 | 只看该作者
D_M_GuYing 发表于 2022-11-5 17:33
IFEX %wzPath%,!
        {
            DISK %&drvx%,%RDISK%,2,1

把红色部分删了

如下紫色部分 注意包括  }!
}!
    {  //如果通过注册表 不能定位配置文件 就运行 某个批处理搜索找到 配置文件。
        FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH%
        ENVI wzPath=%STPATH%\WEPE\WEPE.INI
    }  



改成:



}
ifex [! %wzPath%   |  '%wzPath%'=''],
{  //如果通过注册表 不能定位配置文件 ,或者定位的配置文件不存在,就运行 某个批处理搜索找到 配置文件。
        FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH%
        ENVI wzPath=%STPATH%\WEPE\WEPE.INI
}

点评

上个帖子没说明白, REGI .HKLM\SYSTEM\CurrentControlSet\Control\SystemStartOptions,&sso forx * %&sso% ,&p0, { envi &&item0= mstr &&item0=0,7,%&p0% Find $"%&item0%"="RDPATH=" , {  详情 回复 发表于 2022-11-5 18:31
FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH% ENVI wzPath=%STPATH%\WEPE\WEPE.INI 上面的就是找不到配置文件时,查找光驱文件用的 红色部分不能删,删了就找不到U启的启动盘了  详情 回复 发表于 2022-11-5 18:24
回复

使用道具 举报

75#
 楼主| 发表于 2022-11-5 17:38:51 | 只看该作者
D_M_GuYing 发表于 2022-11-5 17:33
IFEX %wzPath%,!
        {
            DISK %&drvx%,%RDISK%,2,1

你说的那个pecmd 识别为 disk=2 part=4 的分区,diskpart 识别为什么了?
难道你的u盘分区 不规范?
回复

使用道具 举报

76#
发表于 2022-11-5 17:42:00 | 只看该作者
dos时代菜鸟 发表于 2022-11-5 16:53
u启,是个啥启动结构?
把u盘量产成光盘了?格式化模拟了?还是 boot.wim 放在u盘,用启动器通过 ntload ...

用UltraISO,写入硬盘映像......,启动分区设置的隐藏



点评

保存下面 代码为 x.ini 用 pecmd 调用之,看看结果。 通过 偏移量看看,能否校准 REGI .HKLM\SYSTEM\CurrentControlSet\Control\SystemStartOptions,&sso forx * %&sso% ,&p0, { envi  详情 回复 发表于 2022-11-5 18:03
回复

使用道具 举报

77#
发表于 2022-11-5 17:53:22 | 只看该作者
知道了你想怎么样
回复

使用道具 举报

78#
 楼主| 发表于 2022-11-5 18:03:29 | 只看该作者
D_M_GuYing 发表于 2022-11-5 17:42
用UltraISO,写入硬盘映像......,启动分区设置的隐藏

保存下面 代码为  x.ini
用 pecmd 调用之,看看结果。 通过 偏移量看看,能否校准

    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:\ part=<1>%&p0%
        }
    }
part -drv list volume \ArcName\%part%,part_info

mstr disk,part_offset=<2><6>%part_info%
part list part %disk%,parts

forx * %parts%,partn,
{
        part list part %disk%#%partn%,partx_info
        mstr partx_offset=<4>%partx_info%
        ifex #%partx_offset%=%part_offset%,envi partx=%partn%
}
mess reg=%&sso%\n part0=%part_info% \n seach0=[%disk%] [%partx%] [%part_offset%]

点评

[attachimg]511468[/attachimg] [attachimg]511469[/attachimg]  详情 回复 发表于 2022-11-5 18:11
回复

使用道具 举报

79#
发表于 2022-11-5 18:11:13 | 只看该作者
dos时代菜鸟 发表于 2022-11-5 18:03
保存下面 代码为  x.ini
用 pecmd 调用之,看看结果。 通过 偏移量看看,能否校准




点评

从 diskpart 的分析看,windows 没有把那个分区 视为一个可以分配盘符的卷,所以必然出现问题。  详情 回复 发表于 2022-11-5 18:52
回复

使用道具 举报

80#
发表于 2022-11-5 18:24:20 | 只看该作者
dos时代菜鸟 发表于 2022-11-5 17:36
把红色部分删了

如下紫色部分 注意包括  }!

        FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH%
        ENVI wzPath=%STPATH%\WEPE\WEPE.INI
上面的就是找不到配置文件时,查找光驱文件用的

红色部分不能删,删了就找不到U启的启动盘了
而且,不但不分配U盘的盘符,却把我的ESP分区给分配盘符了
运行时,还是如图


回复

使用道具 举报

81#
发表于 2022-11-5 18:31:40 | 只看该作者
dos时代菜鸟 发表于 2022-11-5 17:36
把红色部分删了

如下紫色部分 注意包括  }!

上个帖子没说明白,
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%'='rdisk',
    {
        ……………………………………
    }!
        {
        FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH%
        ENVI wzPath=%STPATH%\WEPE\WEPE.INI
        }  
}



这部分如果分析注册表,发现是光驱启动,定位光驱盘符用的
回复

使用道具 举报

82#
 楼主| 发表于 2022-11-5 18:52:10 | 只看该作者
本帖最后由 dos时代菜鸟 于 2022-11-5 19:23 编辑

从 diskpart 的分析看,windows 没有把那个分区 视为一个可以分配盘符的卷,所以必然出现问题。

那个分区 没有 对应的 volume ,diskpart 也没有分配给他 vol ,这样的分区,应该不在 pecmd 的考量范围。
估计用 diskpart 也无法把他分配盘符,可能需要特殊的 工具 对那个分区读取吧,
如果 pe 已经 为其分配了盘符,可以用 forx 尝试找到他。

ifex '%wzpath%'='',
{
   forx !\wepe\wepe.ini,wzpath,1,
   {
      ENVI wzPath=%wzpath%
    }
}
ifex '%wzpath%'='',mess 没定位到指定配置文件


就是靠注册表 rdisk 精准定位找不到的,就各个盘符轮训呗。 还分啥是不是光驱?



点评

笨方法虽然不能面面俱到,但对我这个PE却管用,先不折腾了 //查找并分配外置所在的隐藏分区 IFEX %ProgramFiles%\WEPE.INI,ENVI wzPath=%ProgramFiles%\WEPE.INI!CALL FINDFZ FDIR wimPath=%wzPath% _SUB FI  详情 回复 发表于 2022-11-5 19:47
嗯,那我就还用我那个笨方法 IFEX %wzPath%,! { CALL getNoDrv DISK %nodrv%,%RDISK%,2,1 ENVI wzPath=%nodrv%\WEPE\WEPE.INI }  详情 回复 发表于 2022-11-5 19:43
回复

使用道具 举报

83#
发表于 2022-11-5 19:43:32 | 只看该作者
dos时代菜鸟 发表于 2022-11-5 18:52
从 diskpart 的分析看,windows 没有把那个分区 视为一个可以分配盘符的卷,所以必然出现问题。

那个 ...

嗯,那我就还用我那个笨方法
    IFEX %wzPath%,!
    {
        CALL getNoDrv
        DISK %nodrv%,%RDISK%,2,1
        ENVI wzPath=%nodrv%\WEPE\WEPE.INI
    }
回复

使用道具 举报

84#
发表于 2022-11-5 19:47:20 | 只看该作者
dos时代菜鸟 发表于 2022-11-5 18:52
从 diskpart 的分析看,windows 没有把那个分区 视为一个可以分配盘符的卷,所以必然出现问题。

那个 ...

笨方法虽然不能面面俱到,但对我这个PE却管用,先不折腾了

//查找并分配外置所在的隐藏分区
IFEX %ProgramFiles%\WEPE.INI,ENVI wzPath=%ProgramFiles%\WEPE.INI!CALL FINDFZ
FDIR wimPath=%wzPath%

_SUB FINDFZ
REGI .HKLM\SYSTEM\CurrentControlSet\Control\SystemStartOptions,&sso
    forx * %&sso% ,&p0,
    {
        envi &&item0=
        mstr &&item0=0,7,%&p0%
        Find $"%&item0%"="RDPATH=" ,
        {
            mstr RDISK=29,1,%&p0%
            mstr PARTITION=41,1,%&p0%
            mstr CDROM=23,5,%&p0%
        }
    }
FIND $%CDROM%=CDROM,!
{
    DISK ,%RDISK%,%PARTITION%,1
    CALL getNoDrv
    DISK  %nodrv%,%RDISK%,%PARTITION%,1
    ENVI wzPath=%nodrv%\WEPE\WEPE.INI
    IFEX %wzPath%,!
    {
        CALL getNoDrv
        DISK %nodrv%,%RDISK%,2,1
        ENVI wzPath=%nodrv%\WEPE\WEPE.INI
    }
}
IFEX %wzPath%,!
{
    FORX !\Setup\安装WinPE.CMD,STPATH,1,FDRV STPATH=%STPATH%
    ENVI wzPath=%STPATH%\WEPE\WEPE.INI
}
IFEX %wzPath%,!
{
    MOUN !\WEPE\WEPE.INI,X:\a,1
    FILE X:\a
    FORX !\WEPE\WEPE.INI,fPath,1,ENVI wzPath=%fPath%
}
IFEX %wzPath%,!
{
    SHOW -1:-1
    FORX !\WEPE\WEPE.INI,fPath,1,ENVI wzPath=%fPath%
}
EXEC =!CMD /C ECHO ENVI wzPath=%wzPath% > %temp%\wzPath.INI
_END

_SUB getNoDrv
    ENVI nodrv=
    IFEX W:,!ENVI nodrv=W:
    IFEX V:,!ENVI nodrv=V:
    IFEX T:,!ENVI nodrv=T:
    IFEX S:,!ENVI nodrv=S:
    IFEX R:,!ENVI nodrv=R:
    IFEX Q:,!ENVI nodrv=Q:
    IFEX P:,!ENVI nodrv=P:
    IFEX O:,!ENVI nodrv=O:
    IFEX N:,!ENVI nodrv=N:
    IFEX M:,!ENVI nodrv=M:
    IFEX L:,!ENVI nodrv=L:
    IFEX K:,!ENVI nodrv=K:
    IFEX G:,!ENVI nodrv=G:
    IFEX I:,!ENVI nodrv=I:
    IFEX H:,!ENVI nodrv=H:
    IFEX G:,!ENVI nodrv=G:
    IFEX F:,!ENVI nodrv=F:
    IFEX E:,!ENVI nodrv=E:
    IFEX D:,!ENVI nodrv=D:
    IFEX C:,!ENVI nodrv=C:
_END


点评

休息,休息,休息。  详情 回复 发表于 2022-11-5 21:45
SHOW -1:-1 后要跟下面这个,不然 系统不识别的 linux 分区都 被分配盘符了,容易误操作给格式化了。 fdrv drvs=*: forx * %drvs%,drvx, { ifex ! %drvx%\,subj -%drvx% }  详情 回复 发表于 2022-11-5 21:15
mstr RDISK=29,1,%&p0% mstr PARTITION=41,1,%&p0% mstr CDROM=23,5,%&p0% 这个 ?如果 遇到某个硬盘超过9个分区的,咋办?  详情 回复 发表于 2022-11-5 20:45
[attachimg]511476[/attachimg] 更新了 这次 看 适应你的情况不?  详情 回复 发表于 2022-11-5 20:18
回复

使用道具 举报

85#
发表于 2022-11-5 19:53:19 | 只看该作者
呵呵!!!!!
回复

使用道具 举报

86#
 楼主| 发表于 2022-11-5 20:18:55 | 只看该作者
本帖最后由 dos时代菜鸟 于 2022-11-5 20:37 编辑
D_M_GuYing 发表于 2022-11-5 19:47
笨方法虽然不能面面俱到,但对我这个PE却管用,先不折腾了

//查找并分配外置所在的隐藏分区



更新了 这次 看 适应你的情况不?

原来你是靠  SHOW -1:-1 把 那个分区分配盘符的。 你可以在 运行这个前也运行一下 这个指令 “pecmd show -1:-1”  再调用之前的版本,或者这个版本。应该就可以了。难怪之前的版本都不好用, 那个特定的分区 是用  SHOW -1:-1  个指令装载的。


根据 注册表 信息判断,
如果是光驱,就轮询光盘,
否则 获取分区信息并精准定位,
    如果精准定位不成,就根据注册表中文件路径的信息轮询所有盘符。




回复

使用道具 举报

87#
 楼主| 发表于 2022-11-5 20:45:48 | 只看该作者
D_M_GuYing 发表于 2022-11-5 19:47
笨方法虽然不能面面俱到,但对我这个PE却管用,先不折腾了

//查找并分配外置所在的隐藏分区

            mstr RDISK=29,1,%&p0%
            mstr PARTITION=41,1,%&p0%
            mstr CDROM=23,5,%&p0%

这个 ?如果 遇到某个硬盘超过9个分区的,咋办?
回复

使用道具 举报

88#
发表于 2022-11-5 21:03:54 | 只看该作者
我不记得是在哪里有了这样的记忆:(可能曾经在写MBR还是DBR程序的时候)
在系统引导阶段 你从哪个设备启动,那它就是临时认定disk 0 ,然后到系统完全启动后,这个设备在主板上会恢复原来的设备号 disk x  。 所以我们注册表查到的基本就是类似:
multi(0)disk(0)rdisk(0)partition(1)
multi(0)disk(0)vdisk(0)partition(1)
这类的值! 所以此路难解!

点评

是可解的,只有特殊的 启动介质可能不行。 multi(0)disk(0)rdisk(0)partition(1) 是现在 虚拟内存盘上 xp 系统默认配置。 其他的 不一定,尤其是 pe. 我们找的是 在注册表中记录的 启动pe 的 boot.wim 的位置  详情 回复 发表于 2022-11-5 21:12
回复

使用道具 举报

89#
 楼主| 发表于 2022-11-5 21:12:21 | 只看该作者
610644034 发表于 2022-11-5 21:03
我不记得是在哪里有了这样的记忆:(可能曾经在写MBR还是DBR程序的时候)
在系统引导阶段 你从哪个设备启 ...

是可解的,只有特殊的 启动介质可能不行。

multi(0)disk(0)rdisk(0)partition(1)
是现在 虚拟内存盘上 xp 系统默认配置。

其他的 不一定,尤其是 pe. 我们找的是 在注册表中记录的 启动pe 的 boot.wim 的位置。boot.wim 可以在任何位置,甚至 光盘。
回复

使用道具 举报

90#
 楼主| 发表于 2022-11-5 21:15:30 | 只看该作者
D_M_GuYing 发表于 2022-11-5 19:47
笨方法虽然不能面面俱到,但对我这个PE却管用,先不折腾了

//查找并分配外置所在的隐藏分区

SHOW -1:-1

后要跟下面这个,不然 系统不识别的 linux 分区都 被分配盘符了,容易误操作给格式化了。

fdrv drvs=*:
forx * %drvs%,drvx,
{
    ifex ! %drvx%\,subj -%drvx%
}
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-3 11:38

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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