|
ENVI &L=W M N Q R S T U V B D E F G H I J K L O P A Z
ENVI &T0=
CALC &Ti=0
ENVI &LG=X:\找外置文件历程.LOG
FORX %WINDIR%\精确定位文件\ZW-*,&T0,1,
{
FNAM &T0=%&T0%
ENVI &T0=BOOT\EXTAPP\%&T0%
WRIT %&LG%,$+0,索引文件是“%&T0%”。
Find #%&Ti%=0,CALL FT0 "在未执行挂载任何隐藏分区行为之前,"
CALC &LO=0
LOOP #%&LO%<2,
{
MOUN -udm -u+ -mall -mhide -tag:%&T0% *
CALL FT0 "执行“MOUN -udm -u+ -mall -mhide -tag:%&T0% *”之后,"
MOUN -udm -u+ -udfs -udimg:USBOSV3.iso -mall -mhide -check -CheckFile:%&T0% *
CALL FT0 "执行“MOUN -udm -U+ -udfs -udimg:USBOSV3.iso -mall -mhide -check -CheckFile:%&T0% *”之后,"
CALL FT0M1 %&LO%
CALC &LO=%&LO%+1
WAIT 500
}
TEAM CALL IMDISKFT|CALL FT0M2
FIND $%WINDIR%=X:\WINDOWS,ENVI &TS=本机BIOS不兼容当前PE?!ENVI &TS=启动WIN2003 PE前,USB XHCI曾经被启用了?【停用USB XHCI方法:进入BIOS->不做任何调整->退岀BIOS】
TEXT 抱歉,搜索不到或未能自动挂载外置程序所在的分区。请给卷标为“USBOS”的那个(些)分区手动分配盘符。\n\n下表将仅列出USB存储设备。若列表为空,包括但不限于如下原因:\n\n 1、不恰当地使用了GRUB4DOS USB ACC(加速)功能?\n 2、%&TS% #0x000000 L28 T28 $16
PART -gui -usb
CALL FT0 "在手动指派盘符之后,"
}
CALL TEND
_SUB FT0M1
//第一轮 排除容量太小的分区:按USB总线优先、磁盘号大者优先,先用SHOW命令、再用Moun命令;
//第二轮 按照磁盘号由小到大者顺序,仅用SHOW命令。
TEAM ENVI &UD=|ENVI &NUD=
PART LIST DISK,&DISKX
FIND #%1=0,
{
FORX * %&DISKX%,&ID,
{
PART -DEVID LIST DISK %&ID%,DEVID0V2V
MSTR 容量=<2>%DEVID0V2V%
FIND #%容量%>1000,
{
MSTR 总线=<9>%DEVID0V2V%
FIND $%总线%=7,ENVI &UD=%&ID% %&UD%!ENVI &NUD=%&ID% %&NUD%
}
}
ENVI &DISKX=%&UD% %&NUD%
}
FORX * %&DISKX%,&ID,
{
SHOW %&ID%:-1
CALL FT0 "执行“SHOW %&ID%:-1”之后,"
FIND #%1=0,
{
MOUN -udm -mall -mhide -u+ -udfs -CheckFile:%&T0% \\.\PhysicalDrive%&ID% U-
CALL FT0 "执行“MOUN -udm -mall -mhide -u+ -udfs -CheckFile:%&T0% \\.\PhysicalDrive%&ID% U-”之后,"
MOUN -udm -udm- -mall -mhide1 -udfs -udimg:USBOSV3.iso -CheckFile:%&T0% \\.\PhysicalDrive%&ID% U-
CALL FT0 "执行“MOUN -udm -udm- -mall -mhide1 -udfs -udimg:USBOSV3.iso -CheckFile:%&T0% \\.\PhysicalDrive%&ID% U-”之后,"
}
}
_END
_SUB FT0M2
//搜索可见区“根”、“ISO\”、 “ISOS\”下的USBOSV3.iso
FORX * %&L%,&K,
{
IFEX %&K%:,!
{
CALC &Ti=%&Ti%+1
FORX * U ISO\U ISOS\U,PO,
{
FORX !\%PO%SBOSV3.iso,ISO,0,
{
IFEX %&K%:,EXEC -wait -hide IMDISK -d -m %&K%:
EXEC =!IMDISK -a -f "%ISO%" -m %&K%:
IFEX %&K%:\%&T0%,
{
CALL TEND %&K% "%&Ti%、在尝试用IMDISK挂载“%ISO%”之后,"
}!
{
WRIT %&LG%,+0,
WRIT %&LG%,$+0,%&Ti%、IMDISK装载的“%ISO%”没有发现索引文件。
CALL UNIMDISKD %&K%:
}
}
}
EXIT _SUB
}
}
_END
_SUB FT0
CALC &Ti=%&Ti%+1
WRIT %&LG%,+0,
FORX \%&T0%,&R,1,CALL TEND "%&R%" "%&Ti%、%~1"
WRIT %&LG%,$+0,%&Ti%、%~1没找到外置文件。
_END
_SUB TEND
FIND $%~1=,
{
FIND $%&T0%=,WRIT %&LG%,$+0,没找到索引文件“%WINDIR%\精确定位文件\ZW-*”。
FILE %&LG%->%DESKTOP%
}!
{
LSTR &V2=1,%~1
WRIT %&LG%,$+0,%~2找到了外置文件所在分区“%&V2%:”。
FIND #%&Ti%=1,REGI $HKLM\SOFTWARE\USBOS\MOUNT%&V2%=NO!REGI $HKLM\SOFTWARE\USBOS\MOUNT%&V2%=YES
REGI $HKLM\SOFTWARE\USBOS\V2V=%&V2%
FIND $%&V2%=X,!
{
FORX %&V2%:\BOOT\USBOS.ico,&V0,1,
{
LSTR &V1=1,%&V0%
REGI HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\DriveIcons\%&V1%\DefaultIcon\=%&V0%
}
}
}
FIND $%BP_S%=Y,!FORX * TEM32 WOW64,&K,TEAM FILE %WINDIR%\SYS%&K%\BOOTPART.*|FILE %WINDIR%\SYS%&K%\BOOTPT64.SYS
FILE %CURFILE%
EXIT FILE
_END
_SUB IMDISKFT
PART list disk,&D
forx * %&D%,&Dn,
{
part list disk %&Dn%,&Dif
MSTR &bT=<9>%&Dif%
find $%&bT%=7,!exit CONTINUE
//总线不是USB的设备,将被忽略。
PART list part %&Dn%,&P
forx * %&P%,&Pn,
{
LSTR &Pnx=1,%&Pn%
find $%&Pnx%=@,exit CONTINUE
find $%&Pnx%=-,exit CONTINUE
PART -fill list part %&Dn%#%&Pn%,&Pninfo
MSTR &start,&Len,&drvl=<4><5><8>%&Pninfo%
find $%&drvl%=*,!exit CONTINUE
//已有盘符的分区,将被忽略。
find #%&Len%<629145600,exit CONTINUE
//小于629145600(600MB)的分区,将被忽略。
FORX * %&L%,&K,
{
IFEX %&K%:,!
{
CALC &Ti=%&Ti%+1
RAMD ImDisk*&V*%&start%*%&Len%*0*\\.\PhysicalDrive%&Dn% -a -o hd -m %&K%:
wait 500
CALL TEND %&K% "%&Ti%、在尝试用IMDISK挂载HD%&Dn%之偏移点%&start%,长度为%&Len%扇区之后,"
CALL UNIMDISKD %&K%:
exit forx
}
}
}
}
_END
_SUB UNIMDISKD
RAMD Imdisk*&&V -d -m %~1
RAMD Imdisk*&&V -D -m %~1
RAMD Imdisk*&&V -R -m %~1
_END
|
|