无忧启动论坛

标题: 利用PECMD指定U盘盘符的问题 [打印本页]

作者: 青青草    时间: 2025-3-6 12:50
标题: 利用PECMD指定U盘盘符的问题
本帖最后由 青青草 于 2025-3-7 14:46 编辑

      在WINPE中,如何利用PECMD给含有文件夹SystemISO的U盘某分区指定盘符为Z?(只考虑单个U盘情况。)
如果知道含有文件夹SystemISO的U盘分区编号,比如,3,
  SUBJ Z:\
  SUBJ %CurDrv%
  SHOW U:3,Z
即可解决。
如果只知道U盘某分区含有文件夹SystemISO呢?
DeepSeek的回答是:
      FORX @\Drives,Drive,1,IFEX %Drive%\SystemISO,!! SUBJ %Drive%,Z:
运行结果不如意。
应如何书写呢?
望高手赐教!
谢谢!



作者: szwp    时间: 2025-3-6 13:08
多个U盘有此文件夹,还是Z已被占用?
作者: 青青草    时间: 2025-3-6 13:26
szwp 发表于 2025-3-6 13:08
多个U盘有此文件夹,还是Z已被占用?

只考虑单个U盘情况。
作者: yzszh64    时间: 2025-3-6 15:08
学习,谢谢各位。
作者: yzydys    时间: 2025-3-6 15:54
感谢楼主分享
作者: 小七七    时间: 2025-3-6 16:08
学习,谢谢各位。
作者: 青青草    时间: 2025-3-7 11:06
哪位大神解答一下?
作者: 86933924    时间: 2025-3-7 12:04
感谢楼主分享
作者: hua_wuxin    时间: 2025-3-7 12:19
只需考虑分区有盘符的情况的话:
forx @\SystemISO,Drive,1,team mstr Drive=1,3,%Drive% | subj Z: | subj Z:,%Drive%
作者: 青青草    时间: 2025-3-7 12:43
hua_wuxin 发表于 2025-3-7 12:19
只需考虑分区有盘符的情况的话:
forx @\SystemISO,Drive,1,team mstr Drive=1,3,%Drive% | subj Z: | sub ...

谢谢!
作者: 86933924    时间: 2025-3-7 13:34

感谢楼主分享
作者: 2011gameboys    时间: 2025-3-7 14:06
感谢分享
作者: ABCPE    时间: 2025-3-7 17:19


感谢楼主分享
作者: 青青草    时间: 2025-4-17 07:06
hua_wuxin 发表于 2025-3-7 12:19
只需考虑分区有盘符的情况的话:
forx @\SystemISO,Drive,1,team mstr Drive=1,3,%Drive% | subj Z: | sub ...

如果分区没有盘符,又该如何书写?
谢谢!
作者: hua_wuxin    时间: 2025-4-17 10:55
青青草 发表于 2025-4-17 07:06
如果分区没有盘符,又该如何书写?
谢谢!

我也是半桶水 没什么好办法
作者: 527104427    时间: 2025-4-17 11:20
本帖最后由 527104427 于 2025-4-17 12:01 编辑

pecmd要用最新的,否则没这功能。

#code=936T950
set^ EnviMode=1
set^ ForceLocal=1
call FindSystemISO Z:
exit

_sub FindSystemISO
        part list disk ,DiskList
        forx *v DiskList,DiskNum,
        {
                call $--qd --ret:h Kernel32.dll,CreateFileW,$\\.\PhysicalDrive%DiskNum%,#2147483648,#3,#0,#3,#128,#0
                ifex $%h%<>-1,
                {
                        set nInBufferSize=0xC
                        set$# lpInBuffer=*%nInBufferSize% 0
                        calc nOutBufferSize=0x28 + 1K
                        set$# lpOutBuffer=*%nOutBufferSize% 0
                        set$# lpBytesReturned=*%ptrlen% 0
                        call $--qd --ret:RetDeviceIoControl Kernel32.dll,DeviceIoControl,#%h%,#2954240,*lpInBuffer,#%nInBufferSize%,*lpOutBuffer,#%nOutBufferSize%,*lpBytesReturned,#0
                        call $--qd --bool --ret:RetCloseHandle Kernel32.dll,CloseHandle,#%h%
                        ifex $[ %RetDeviceIoControl%<>0 & ( %lpOutBuffer?char:10%=1 | %lpOutBuffer?long:28%=7 ) ],
                        {
                                part list part %DiskNum%,PartNumList
                                sed -ex PartNumList=0,[-@=]\z(\b+)*,,PartNumList
                                forx *v PartNumList,PartNum,
                                {
                                        ifex \\.\GLOBALROOT\device\Harddisk%DiskNum%\Partition%PartNum%\SystemISO\,
                                        {
                                                set tmpdrv=%~1
                                                find *=tmpdrv,
                                                {
                                                        fdrv -idle DrvList=*
                                                        mstr * tmpdrv=<-1>DrvList
                                                }
                                                find *<>tmpdrv,!! subj *%tmpdrv%,\Device\Harddisk%DiskNum%\Partition%PartNum%   //show * %DiskNum%:%PartNum%,%tmpdrv%   //subj *%tmpdrv%,\\?\Harddisk%DiskNum%Partition%PartNum%
                                                exit _sub
                                        }
                                }
                        }
                }
        }
_end





作者: 青青草    时间: 2025-4-17 11:44
527104427 发表于 2025-4-17 11:20
pecmd要用最新的,否则没这功能。

#code=936T950

pecmd下载了PECMD-V4.0.2011.501版,结果失败。不知何故?
作者: 527104427    时间: 2025-4-17 11:58
本帖最后由 527104427 于 2025-4-17 12:02 编辑
青青草 发表于 2025-4-17 11:44
pecmd下载了PECMD-V4.0.2011.501版,结果失败。不知何故?


PECMD.7z (1.83 MB, 下载次数: 12)

上面的代码重新复制一下,刚才少写了一个逗号

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=205402&extra=page%3D1
https://wwi.lanzoui.com/b0wh8vjc






作者: jnight    时间: 2025-4-17 12:24
感谢分享
作者: 青青草    时间: 2025-4-17 14:02
本帖最后由 青青草 于 2025-4-17 14:05 编辑
527104427 发表于 2025-4-17 11:58
上面的代码重新复制一下,刚才少写了一个逗号

http://bbs.wuyou.net/forum.php?mod=viewthread& ...

已成功加载。
再请教一个问题:
  1. #code=936T950
  2.     set^ EnviMode=1
  3.     set^ ForceLocal=1
  4.     call FindSystemISO Z:                 
  5.     IFEX Z:\, // 只有成功挂载Z盘才执行后续操作
  6.     {
  7.         CALL LINK
  8.         CALL ImDisk
  9.         CALL MyDisk
  10.         CALL ImDiskyjcd
  11.     }
复制代码

其中
CALL LINK
CALL ImDisk
CALL MyDisk
CALL ImDiskyjcd
没有被执行。是什么原因?是代码错误吗?
谢谢!

作者: 527104427    时间: 2025-4-17 17:52
青青草 发表于 2025-4-17 14:02
已成功加载。
再请教一个问题:
其中

看不出什么问题。
你可以把iso传上来看看,我帮你研究研究
作者: 青青草    时间: 2025-4-17 22:29
527104427 发表于 2025-4-17 17:52
看不出什么问题。
你可以把iso传上来看看,我帮你研究研究

我是利用grub2,由Windows.ISO动态构造的pe,也就是 从Windows11.iso启动PE。
作者: 青青草    时间: 2025-4-20 12:31
标题: qe
本帖最后由 青青草 于 2025-4-20 15:10 编辑
527104427 发表于 2025-4-17 17:52
看不出什么问题。
你可以把iso传上来看看,我帮你研究研究

更新了Explorer++.exe后,问题解决了。再请教一个问题,
  1. MOUN -u Y:
  2. FIND $0=%&bX64%,
  3.     {
  4.         IFEX "Z:\boot\外置工具x86.iso", MOUN "Z:\boot\外置工具x86.iso",Y:,1
  5.             }!{
  6.         IFEX "Z:\boot\外置工具x64.iso",MOUN "Z:\boot\外置工具x64.iso",Y:,1
  7.     }
复制代码
挂载失败,不知是何原因?
谢谢!
无需解答了,我用
  1. FIND $0=%&bX64%,
  2.     {
  3.         EXEC =!imdisk.exe -a -f "Z:\boot\外置工具x86.iso" -m "Y:"
  4.     }!{
  5.        EXEC =!imdisk.exe -a -f "Z:\boot\外置工具x64.iso" -m "Y:"
  6.     }
复制代码
挂载成功了!




作者: 527104427    时间: 2025-4-20 17:19
青青草 发表于 2025-4-20 12:31
更新了Explorer++.exe后,问题解决了。再请教一个问题,
挂载失败,不知是何原因?
谢谢!

pecmd有调用api的挂载方式:MOUN-VHD -iso
另外,语法上括号最好独占一行,不要几个括号挤一起。

FIND $0=%&bX64%,
{
        //卸载
        moun-vhd -u "Z:\boot\外置工具x86.iso"
        IFEX "Z:\boot\外置工具x86.iso", MOUN-VHD -iso "Z:\boot\外置工具x86.iso",Y:,,&&v
}!
{
        //卸载
        moun-vhd -u "Z:\boot\外置工具x64.iso"
        IFEX "Z:\boot\外置工具x64.iso",MOUN-VHD -iso "Z:\boot\外置工具x64.iso",Y:,,&&v
}








作者: 青青草    时间: 2025-4-20 17:56
527104427 发表于 2025-4-20 17:19
pecmd有调用api的挂载方式:MOUN-VHD -iso
另外,语法上括号最好独占一行,不要几个括号挤一起。

谢谢!
作者: 青青草    时间: 2025-4-21 14:27
本帖最后由 青青草 于 2025-4-21 16:02 编辑
527104427 发表于 2025-4-20 17:19
pecmd有调用api的挂载方式:MOUN-VHD -iso
另外,语法上括号最好独占一行,不要几个括号挤一起。

今天又发现个问题:将 外置工具x64.iso 挂载为Y盘后,运行其中的一些软件(比如,"Y:\网络工具\Chrome\App\chrome.exe", 无反应),用人工把  Y:\网络工具 复制到其它盘(比如,D:\),再运行 D:\网络工具\Chrome\App\chrome.exe" 则成功。
请教大神,如果不复制到其它盘,有何解决办法?
谢谢!
作者: 527104427    时间: 2025-4-24 12:26
青青草 发表于 2025-4-21 14:27
今天又发现个问题:将 外置工具x64.iso 挂载为Y盘后,运行其中的一些软件(比如,"Y:\网络工具\Chrome\Ap ...

可能它需要可写的目录才能运行,我记得chrome.exe要写用户配置的。或者,你把ISO改成VHD试试

作者: 青青草    时间: 2025-4-24 13:30
527104427 发表于 2025-4-24 12:26
可能它需要可写的目录才能运行,我记得chrome.exe要写用户配置的。或者,你把ISO改成VHD试试

算了,改用7-ZIP分类压缩好了。
谢谢!




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3