@SET &OldLOGS=%&__LOGS%
IFEX PE.LOG, LOGS * PE.LOG
//查找 CDROM 按物理号排列 
_SUB FindCDROMPhy
SET-def CDROM=
{   ENVI^ ForceLocal=1
    FDRV  *idle  *rsort  &&FreeV=*:
    MSTR &&V1=<1>%FreeV%
    SET$  &buf=*1024 0x00   
    FDRV  &&ALL=*:
    SET &ic=0
    SET &skips=0
    LOOP #1=1,
    {   WAIT 10
        SET$  buf=*1024 0x00   
        SUBJ &   %V1%,\\.\CDROM%ic%
        CALL $**qd **ret:&&r  Kernel32.dll,GetVolumeNameForVolumeMountPointW,$%V1%\,*&buf,#1000
        SUBJ &-  %V1%,
        FIND $""="%buf%", 
        {   IFEX $%skips%>20, EXIT LOOP    //USB光驱设备名，可能不连续
            CALC &skips=%skips% + 1
        }!
        { SET skips=0
            SET-def drv=未
            SET &ZV=%buf%
            FORX * %ALL%,&&a,
            {   SET$  buf=*1024 0x00   
                CALL $**qd **ret:&r  Kernel32.dll,GetVolumeNameForVolumeMountPointW,$%a%\,*&buf,#1000
                FIND $%ZV%=%buf%, TEAM SET drv=%a%| EXIT  FORX 
            }
            TEAM SET CDROM=%CDROM%CDROM%ic% %drv%    |   
        }
        CALC  &ic=%ic% + 1 
    }
    //很多虚拟光驱，没有 \\.\CDROM0~N 的标准设备名， 就叫CDROMx
    FORX * %ALL%,&&a,
    {   LPOS* &&i=%a%,1,%CDROM%
        IFEX $%i%>0, EXIT -  //下一轮
        FORM -raw  &&T=%a%
        FIND $DRIVE_CDROM=%T%,!  EXIT -  //下一轮
        TEAM SET CDROM=%CDROM%CDROMx %a%    |
    }
}
ENVI-ret %1=%&CDROM%
_END

FindCDROMPhy  &&CDROMS
-[%&CDROMS%]
@LOGS * %&OldLOGS%
@MESS [%&CDROMS%]
//大部分虚拟光驱，没有 \\.\CDROM0~N 的标准设备名。改不了盘符。需要改，也是软件自带的功能。
//一般是先卸载， 再加载， 加载时选个新的盘符。
//FirDisk 和 HaiZIp 的虚拟光驱 可以改。
//大概哪些 windows 能发现设备装的 都支持把。
//[CDROM0 F:    CDROM1 O:    CDROM2 V:    ]
//F: FirDisk 虚拟光驱     V: HaoZIP 虚拟光驱
//Imdisk 不可以， 好像设备名为\Device\ImDisk0~N 但不一定是光驱，多半是磁盘。
//Imdisk改盘符： （1） SUBJ *-  H:  （2）   SUBJ *  I:,\Device\ImDisk0