|
本帖最后由 红毛樱木 于 2017-1-3 21:22 编辑
- LOGS * %Curdir%\DRV.LOG
- TEAM ENVI^ ENVIMODE=1| ENVI^ FORCELOCAL=1
- SET$ NL=0d 0a
- SET$ NL1=0a
- SET$ SP=0d 0a 20 20 20 20
- SET& TAB=09
- ENVI &INST_HWIDs=
- //如果是EXE文件,使用内置工具
- TEAM ENVI run_fdrv=|ENVI run_7z=|ENVI run_devcon=
- FEXT ext=%~0
- ENVI parm=%~1
- FIND $%ext%=EXE,
- {
- ENVI run_fdrv=-exe:*cab:#100:fdrv.exe
- ENVI run_7z=-exe:*cab:#101:7z.exe
- ENVI run_devcon=-exe:*cab:#102:devcon.exe
- }
- FIND |%&bX64%=0,ENVI ARCH=X86!ENVI ARCH=X64
- FIND $%ARCH%=X64, ENVI DRV_DIR=%CurDir%\NT6x64! ENVI DRV_DIR=%CurDir%\NT6x86
- GetNotDrivedHWID &DEVICE_LIST %parm%
- //TEAM MESS %&DEVICE_LIST% | EXIT
- InstallDevicesDriver
- EXIT
- //参数%~1=返回的HWID列表 %~2=前缀,可选
- _SUB GetNotDrivedHWID
- ENVI &&find_str=%~2
- FIND $%&find_str%=,ENVI &&find_str=*
- EXEC* %run_devcon% &&VV=!devcon.exe status %&find_str%
- SED &&VV=0:0,%SP%,%TAB%%TAB%,%&VV% //将部分换行符替换为TAB
- ENVI &&dev_running=[^%NL1%]*Driver is running[^%NL1%]*%NL%
- SED &&VV=0:0,%dev_running%,,%&VV% //删除running的HWID
- ENVI &&dev_stopped=[^%NL1%]*Device is currently stopped[^%NL1%]*%NL%
- SED &&VV=0:0,%dev_stopped%,,%&VV% //删除currently stopped的HWID
- ENVI &&del_str=%TAB%%TAB%[^%NL1%]*%NL%
- SED &&VV=0:0,%del_str%,%NL%,%&VV% //删除不需要的信息
- ENVI &&del_str=[^%NL1%]*matching device[^%NL1%]*%NL%
- SED &&VV=0:0,%del_str%,,%&VV% //删除最后一行信息
- ENVI-ret %~1=%&VV%
- _END
- _SUB InstallDevicesDriver
- READ -,-1,&DevNum,%DEVICE_LIST%
- ENVI &LineNum=1
- LOOP #%&LineNum%<=%&DevNum%,
- {
- READ -, %&LineNum%,DevHWID,%DEVICE_LIST% //读取一个设备ID
- CALL InstallDriverForHWID %DevHWID%
- CALC &LineNum=%&LineNum%+1 //处理下一行
- }
- _END
- _SUB InstallDriverForHWID
- ENVI &&hwid=%~1
- FIND $%&hwid%=,EXIT
- //查找DevHWID对应的驱动文件
- EXEC* %run_fdrv% &Drv_Info=!fdrv.exe "%DRV_DIR%" "%&hwid%" 1
- READ -,1,&&Drv_File,%&Drv_Info%
- READ -,4,&&Drv_Inf,%&Drv_Info%
- //没有找到,退出
- FIND $%&Drv_File%=NOT_FOUND, TEAM WRIT -,$+0,%&hwid%: not found | EXIT
- //找到了,继续安装
- ENVI &INST_HWIDs=%INST_HWIDs%%&hwid%%NL%
- WRIT -,$+0,%&hwid%: installed
- TEAM MESS "%&Drv_File%" "%&Drv_Inf%"| EXIT
- CALL Install_Driver_7Z "%&Drv_File%" "%&Drv_Inf%"
- _END
- _SUB Install_Driver_7Z
- ENVI &Drv_File=%~1
- ENVI &Drv_Inf=%~2
- //得到驱动程序包的名称
- FDIR fPath=%Drv_File%
- FNAM fName=%Drv_File%
- ENVI DrvFile_7z=%fPath%\%fName%.7z
- //解压缩到%temp%\%fName%目录下,安装,并删除
- MDIR %temp%\%fName%
- EXEC* %run_7z% &result=!7z.exe x "%DrvFile_7z%" -y -o"%temp%\%fName%"
- //拷贝*.cat文件到catroot,安装程序可能不会自动完成
- FDIR fPath=%temp%\%fName%\%Drv_Inf%
- FILE %fPath%\*.cat=>%windir%\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}
- //安装驱动
- DEVI %temp%\%fName%\%Drv_Inf%
- //删除临时文件
- FILE %temp%\%fName%
- _END
复制代码
加入一个"Device is currently stopped"状态的排除
另外FIND $%ARCH%=X64, ENVI DRV_DIR=%CurDir%\NT6x64! ENVI DRV_DIR=%CurDir%\NT6x86
这一段原版中多一个空格,造成DRV_DIR变量在64位系统下会多出一个空格
上面改了这两个。 |
|