中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » 其它操作系统综合讨论区 » [原创]借助DevCon纯脚本备份驱动,兼容驱动精灵(2008-01-17)
« [1] [2] [3] [4] [5] »
作者:
标题: [原创]借助DevCon纯脚本备份驱动,兼容驱动精灵(2008-01-17) 上一主题 | 下一主题
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『楼 主』:  [原创]借助DevCon纯脚本备份驱动,兼容驱动精灵(2008-01-17)

因会员要求利用纯脚本来安全删除U盘那贴,无意间发现DevCon命令就突发奇想,利用这个命令写个脚本来备份设备驱动。此脚本可以备份全部的设备驱动包括设备管理器中隐藏的设备,就备份项目上超过了大家熟悉的驱动精灵。


更新说明:
  不能说此脚本比驱动精灵更完美,但它确实弥补了驱动精灵的不足!
1、支持备份完整的WHQL数字签名(我手头的驱动精灵 2005专业版就不支持),其它更新版本未知,因为我不想为更高版本激活Key犯愁了:-)
2、兼容驱动精灵已备份的项目,也就是说运行一下脚本就还原所有驱动精灵曾经备份的项目,且路径是任意的,只要在硬盘上或U盘上统统搜出来并更新。
3、支持鼠标点击对话框任选单个设备还原驱动方式。
4、支持宁静默方式外挂安装更新驱动,方便系统集成、Ghost用户调用。
5、修正可能存在的复制错误,更新备份时屏幕显示方式,打印出包含WHQL数字签名的设备名
6、2008-01-17更新重复备份同一设备的问题,更新代码稳定性


@echo off
title 备份基本设备驱动
::::::相关讨论:   http://www.cn-dos.net
::::::网上论坛:  http://groups.google.com/group/fastslz
::::::个性空间:   http://space.cech.com.cn/fastslz
if not %OS%==Windows_NT (cls&echo.&color 4E&echo  此程序必须在Windows NT或2000以上操作系统上运行&ping/n 5 127.1>nul&exit)
devcon.exe>nul 2>nul
if %errorlevel%==9009 (cls&echo.&color 0E&echo 本脚本需要微软 DevCon.exe 命令行实用工具支持&ping/n 5 127.1>nul&exit)
set log="Drivers\%~n0.log"
set Tempfile="%Temp:"=%.\fast.slz"
set count=0&set error=0&set whql=0
if not exist Drivers\nul MD Drivers
del "Drivers\*.log" 2>nul
cls&color 0b
echo.
echo  正在收集设备信息,请稍等...
for %%a in (PCI PCIIDE USB IDE DISPLAY USBPRINT) do (
    for /f "tokens=1* delims=: " %%b in ('devcon find *%%a*^|find "\"') do echo "%%b"****"%%c">>"%Temp:"=%.\Devinfo.slz"
)
for /f "tokens=1* delims=****" %%b in ('type "%Temp:"=%.\Devinfo.slz"^|find /v ": "') do call :startcopy "@%%~b" "%%~c"
echo.
echo  已经备份了 %count% 项设备驱动
>>%log% echo.
echo  一共备份了 %count% 项设备驱动>>%log%
if %error% gtr 0 (
        echo.
if %error% equ 1 (
        echo  在复制过程中遇到错误
        ) else (
        echo  在复制过程中遇到 %error% 个错误
        )
        echo  请检查日志文件 %log%
        )
endlocal
echo.
echo  按任意键退出. . .&pause>nul

:startcopy
color 0e
if "%~2"=="%forestall%" goto:eof
set "forestall=%~2"
setlocal enabledelayedexpansion
if "%~2"=="" goto:eof
del %Tempfile% 2>nul
set ID=%1
devcon driverfiles %1>%Tempfile% 2>nul
find ":\" %Tempfile%>nul
if errorlevel 1 goto:eof
if %count% equ 0 cls
set name="%~2"
>>%log% echo "%~2"
set ename=%name:&=_%
<nul set/p=正在备份--^> %ename:~0,54%
for %%k in (/ ; ,) do set name=!name:%%k=_!
rem set name=%name:(=[%
rem set name=%name:)=]%
set name=%name:&=_and_%
set name=%name:"=%
for /f "tokens=1 delims=\" %%i in ('type %Tempfile%^|find "\"^|find /v ":"') do set class=%%i
for /f "tokens=1 delims=[" %%i in ('type %Tempfile%^|find /i ".inf"') do set inf=%%~i
for /f "tokens=1* delims=:" %%i in ("%inf:~0,-1%") do for %%a in (%%i) do set "inf=%%a:%%j"&set "infname=%%~nj"
if defined inf (
        xcopy /h /r /y "%inf%" "drivers\%class%\%name%\*.*">nul 2>>%log%
        if errorlevel 1 set /a "error=%error%+1"
)
for /f "tokens=* delims= " %%i in ('type %Tempfile%^|find ":\"^|find /i /v "Driver installed from"') do (
        xcopy /h /r /y "%%~i" "drivers\%class%\%name%\*.*">nul 2>>%log%
        if errorlevel 1 set /a "error=%error%+1"
)
for /f "tokens=1* delims== " %%k in ('type "%inf%"^|find /i ".cat"^|find /v "64"') do set oemname=%%~nl
if defined oemname for /f "delims=*" %%k in ('dir /s /b /a-d "%SystemRoot%\system32\CatRoot\%infname%.cat" 2^>nul') do set catfile=%%~k
if not defined catfile for /f "delims=*" %%k in ('dir /s /b /a-d "%SystemRoot%\%oemname%.cat" 2^>nul') do set catfile=%%k
if defined catfile (
           set infname=%oemname%
           xcopy /h /r /y "%catfile%" "drivers\%class%\%name%\*.*">nul 2>>%log%
           if errorlevel 0 color 0e&echo  含WHQL数字签名
           attrib -s -h -r "drivers\%class%\%name%\%infname%.*">nul
           move /y "drivers\%class%\%name%\%infname%.inf" "drivers\%class%\%name%\%oemname%.inf">nul 2>nul
           move /y "drivers\%class%\%name%\%infname%.cat" "drivers\%class%\%name%\%oemname%.cat">nul 2>nul
)
for /f "tokens=1,2 delims=\ " %%i in ('devcon hwids %ID%^|sed -n "/Hardware ID's:/{n;p;}"') do echo "%infname%.inf"****"%%~i\%%~j">>"Drivers\HardwareID.log"
del "%Temp:"=%\Devinfo.slz" 2>nul
set /a "count=%count%+1"
if not defined catfile echo.
endlocal&(set count=%count%)&(set error=%error%)
goto:eof


  Quote:
上面的备份方法已经够用了,若备份全部的驱动,把
for %%a in (PCI PCIIDE USB IDE DISPLAY) do (
        for /f "tokens=1* delims=: " %%b in ('devcon find %%a\*^|find "\"') do call :startcopy "@%%b" "%%c"
)

替换成
for /f "tokens=1* delims=: " %%b in ('devcon findall *^|find "\"') do call :startcopy "@%%b" "%%c"

相关资料:微软DevCon 命令行实用工具可替代设备管理器

还原更新驱动精灵已备份的项目.CMD代码见15楼

[ Last edited by fastslz on 2008-3-19 at 09:51 AM ]

   此帖被 +42 点积分      点击查看详情   
评分人:【 abcd 分数: +4  时间:2007-11-6 14:21
评分人:【 lxmxn 分数: +8  时间:2007-11-6 14:28
评分人:【 baomaboy 分数: +7  时间:2007-11-6 20:39
评分人:【 everest79 分数: +15  时间:2007-11-7 00:25
评分人:【 vkill 分数: +4  时间:2007-11-7 22:04
评分人:【 wangjf 分数: +4  时间:2008-2-14 16:29


附件 1: 备份驱动.rar (2008-1-17 22:23, 91.35 K, 下载附件所需积分 1 点 ,下载次数: 312)


第一高手    第二高手

2007-11-6 13:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hello547rf44
初级用户





积分 172
发帖 63
注册 2007-11-3
状态 离线
『第 2 楼』:  

COOL,刚刚从vkill师父那里知道有这个好东西,就马上用上了。测试结果如下:

正在备份驱动 --->  "Intel(R) 82845 Processor to I/O Controller - 1A30"
正在备份驱动 --->  "Intel(R) 82845 Processor to AGP Controller - 1A31"
正在备份驱动 --->  "Intel(R) 82801BA LPC Interface Controller - 2440"
正在备份驱动 --->  "Intel(R) 82801BA/BAM USB Universal Host Controller - 2442"
正在备份驱动 --->  "Intel(R) 82801BA/BAM SMBus Controller - 2443"
正在备份驱动 --->  "Intel(R) 82801BA/BAM USB Universal Host Controller - 2444"
正在备份驱动 --->  "Intel(r) 82801BA/BAM AC'97 Audio Controller"
正在备份驱动 --->  "Intel(R) 82801BA Ultra ATA Storage Controller - 244B"
正在备份驱动 --->  "Intel(R) 82801 PCI Bridge - 244E"
正在备份驱动 --->  "USB Root Hub"
正在备份驱动 --->  "USB Root Hub"
正在备份驱动 --->  "Unknown Device"
正在备份驱动 --->  "USB USB\VID_8086&PID_1122\5&16DC22A8&0&2
    : Generic USB Hub"
正在备份驱动 --->  "WDC WD400BB-00JHC0"

已经备份了 17 个设备驱动

在复制过程中遇到错误
请检查日志文件 "Drivers\1.log"

请按任意键继续. . .

好像有一点重复备份了。

2007-11-6 20:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hello547rf44
初级用户





积分 172
发帖 63
注册 2007-11-3
状态 离线
『第 3 楼』:  

期待还原驱动的作品!

附件 1: 1.gif (2007-11-6 20:27, 5.23 K,下载次数: 1)


2007-11-6 20:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 4 楼』:  

还原驱动不好搞定啊,想了几个方案,搞的现在满脑子符号,弄的完全没有头绪了。devcon install参数不适合已知硬件,devcon update必须要先获得硬件ID,硬件ID有一定规律但不好筛选,还要筛选些不必更新的。



第一高手    第二高手

2007-11-7 13:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 5 楼』:  

这楼我就贴点Devcon相关参数及其它应用

  Quote:
常用类型:PCI PCIIDE USB USBSTOR IDE PCIIDE DISPLAY
Devcon hwids *                                  获取全部的硬件ID
Devcon hwids 常用类型\*                     获取常用类型硬件ID
Devcon find 常用类型\*                        查找常用类型硬件信息
Devcon find gendisk                            只查找硬盘包括移动硬盘信息
Devcon find gencdrom                         只查找光驱信息
Devcon update xxx.inf 硬件ID               更新驱动

查询:全球所有 PCI,AGP,PCI-X,PCIe 硬件ID及名称该站不断更新信息(如果你是OEM设备那就查查吧)
@echo off
setlocal enabledelayedexpansion
echo 硬盘型号                接口类型    修订版本
echo ========                ========    ========
for /f "tokens=1,2* delims=\" %%a in ('devcon.exe find gendisk^|find /v /i "USBSTOR\"^|find ":"') do call :fastslz "%%a" "%%b" "%%c"
echo.&pause
:fastslz
set "填充空格=          "
set 类型=%~1%填充空格%
set 修订=%~2
set 修订=%修订:_= %
for %%i in (%修订%) do set 修订=%%i
for /f "tokens=1* delims=:" %%a in ('echo %3') do set 型号="%%~b"
set 型号=%型号:~0,30%
set 型号=%型号:"=%%填充空格%
set 型号=%型号:~1,30%
echo %型号%%类型:~0,12%%修订%
goto:eof
[ Last edited by fastslz on 2007-11-7 at 06:09 PM ]



第一高手    第二高手

2007-11-7 13:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 6 楼』:  

devcon hwids * 后察看就有下面这段
PCI\VEN_1002&DEV_4153&SUBSYS_41531FD3&REV_00\4&1AD7642&0&0058
    Name: RADEON 9550
    Hardware ID's:
        PCI\VEN_1002&DEV_4153&SUBSYS_41531FD3&REV_00
        PCI\VEN_1002&DEV_4153&SUBSYS_41531FD3
        PCI\VEN_1002&DEV_4153&CC_030000
        PCI\VEN_1002&DEV_4153&CC_0300
    Compatible ID's:
        PCI\VEN_1002&DEV_4153&REV_00
        PCI\VEN_1002&DEV_4153
        PCI\VEN_1002&CC_030000
        PCI\VEN_1002&CC_0300
        PCI\VEN_1002
        PCI\CC_030000
        PCI\CC_0300
正在备份驱动 --->  "RADEON 9550 "
请按任意键继续. . .

现在察看刚备份的文件夹下就有个inf文件
C:\>cd "C:\Downloads\Drivers\PCI\RADEON 9550\"

C:\Downloads\Drivers\PCI\RADEON 9550>devcon update oem4.inf "PCI\VEN_1002&DEV_41
53&SUBSYS_41531FD3&REV_00"
Updating drivers for PCI\VEN_1002&DEV_4153&SUBSYS_41531FD3&REV_00 from C:\Downlo
ads\Drivers\PCI\RADEON 9550\oem4.inf.
Drivers updated successfully.
我想依次
Hardware ID's:
        PCI\VEN_1002&DEV_4153&SUBSYS_41531FD3&REV_00
        PCI\VEN_1002&DEV_4153&SUBSYS_41531FD3
        PCI\VEN_1002&DEV_4153&CC_030000
        PCI\VEN_1002&DEV_4153&CC_0300
把这四个都更新应该没有什么问题
谁测试下好了

[ Last edited by vkill on 2007-11-7 at 09:58 PM ]

2007-11-7 21:49
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 7 楼』:  

C:\>cd C:\Downloads\Drivers\USB\USB Root Hub

C:\Downloads\Drivers\USB\USB Root Hub>devcon update "C:\Downloads\Drivers\USB\US
B Root Hub\usbport.inf" "USB\ROOT_HUB&VID10DE&PID00E7&REV00A1"
Updating drivers for USB\ROOT_HUB&VID10DE&PID00E7&REV00A1 from C:\Downloads\Driv
ers\USB\USB Root Hub\usbport.inf.
Drivers updated successfully.

C:\Downloads\Drivers\USB\USB Root Hub>devcon update "C:\Downloads\Drivers\USB\US
B Root Hub\usbport.inf" "USB\ROOT_HUB&VID10DE&PID00E7"
Updating drivers for USB\ROOT_HUB&VID10DE&PID00E7 from C:\Downloads\Drivers\USB\
USB Root Hub\usbport.inf.
Drivers updated successfully.

C:\Downloads\Drivers\USB\USB Root Hub>devcon update "C:\Downloads\Drivers\USB\US
B Root Hub\usbport.inf" "USB\ROOT_HUB"
Updating drivers for USB\ROOT_HUB from C:\Downloads\Drivers\USB\USB Root Hub\usb
port.inf.
Drivers updated successfully.

像这个更新 USB Root Hub 的就没有问题,一切正常

2007-11-7 22:09
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 8 楼』:  


PCI\VEN_1002&DEV_4153&SUBSYS_41531FD3&REV_00
        PCI\VEN_1002&DEV_4153&SUBSYS_41531FD3
        PCI\VEN_1002&DEV_4153&CC_030000
        PCI\VEN_1002&DEV_4153&CC_0300
    Compatible ID's:
        PCI\VEN_1002&DEV_4153&REV_00
        PCI\VEN_1002&DEV_4153
        PCI\VEN_1002&CC_030000
        PCI\VEN_1002&CC_0300
        PCI\VEN_1002
        PCI\CC_030000
        PCI\CC_0300
恩上面的都是硬件ID,有的少有的多,devcon update oem4.inf 上面10个都能成功更新,最通用是PCI\VEN_1002,也就是筛选出符号&第1次出现的前几位就行了,这个筛选是最通用的。但是在USB设备上有时就不通用如

  Quote:
"@USB\ROOT_HUB\4&1D255E7A&0"
"@USB\ROOT_HUB\4&84E02D0&0"
"@USB\ROOT_HUB\4&A6BADD5&0"

备份的时候已经生成了硬件ID保存在HardwareID.log



第一高手    第二高手

2007-11-7 23:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 9 楼』:  

还原驱动已经写好了1楼打包下载,需要sed.exe,有问题跟贴
另外有SATA,SATAII,SCSI,IEEE1394设备的朋友麻烦告知下这些设备是否在常用类型里,谢谢

[code@echo off
title 更新还原驱动
for /f "delims=*" %%i in ('dir /a-d /s /b Drivers\*.log^|find /i /v "HardwareID.log"') do (
     set "log=%%~nxi"
     if %%~zi gtr 1024 mode con cols=70 lines=45
)
if not defined log color 0e&&echo 读取备份日志错误,请检查 . . .&&ping/n 5 127.1>nul&&exit/b
pause
:keyname
color 0b
cls
set keyname=
for /f "delims=*" %%i in ('type "Drivers\%log%"^|findstr /i /v "一共 无效 .inf & : Kernel Proxy"') do echo      %%~i
echo.
set /p keyname=     请选择要更新的设备名,模糊输入连续5个以上字节↘
if not defined keyname call :keyname
dir /ad /s /b Drivers\*|find /i "%keyname%">nul
if %errorlevel%==1 color 0c&&echo      没有对应项,请重新选择 . . .&&ping/n 3 127.1>nul&&call :keyname
for /f "delims=([/\" %%i in ('type "Drivers\%log%"^|find /i "%keyname%"') do set keyname=%%~i
echo.
color 0e
set /p key=     确定还原 %keyname% 吗 Y/N ?
if /i "%key%"=="n" exit/b
if not defined key call :keyname
cls&&echo.
for /f "delims=*" %%a in ('dir /a-d /s /b Drivers\*.inf^|find /i "%keyname%"') do (
        for /f "delims=&" %%i in ('devcon resources *^|sed -n "/%keyname%/{g;1!p;};h"') do devcon update "%%a" "%%i"
     )
if %errorlevel%==0 cls&&echo.&&echo  设备驱动已成功更新。
if %errorlevel%==1 cls&&echo.&&echo  设备驱动已更新,但需要重新启动!
if %errorlevel%==2 cls&&echo.&&echo  更新失败!原因未正确判断出硬件ID,或驱动源不正确。
if %errorlevel%==3 cls&&echo.&&echo  DevCon语法错误。
ping/n 10 127.1>nul&&exit/b[/code]

[ Last edited by fastslz on 2007-11-8 at 05:10 PM ]



第一高手    第二高手

2007-11-8 13:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hello547rf44
初级用户





积分 172
发帖 63
注册 2007-11-3
状态 离线
『第 10 楼』:  

NVIDIA GeForce4 MX 440 (Microsoft Corporation)
     D-Link DFE-530TX PCI Fast Ethernet Adapter (rev.C) #3
     D-Link DFE-530TX PCI Fast Ethernet Adapter (rev.C) #2
     Intel(R) 82845 Processor to I/O Controller - 1A30
     Intel(R) 82845 Processor to AGP Controller - 1A31
     Intel(R) 82801BA LPC Interface Controller - 2440
     Intel(R) 82801BA/BAM USB Universal Host Controller - 2442
     Intel(R) 82801BA/BAM SMBus Controller - 2443
     Intel(R) 82801BA/BAM USB Universal Host Controller - 2444
     Intel(r) 82801BA/BAM AC'97 Audio Controller
     Intel(R) 82801BA Ultra ATA Storage Controller - 244B
     Intel(R) 82801 PCI Bridge - 244E
     USB Root Hub
     USB Root Hub
     Unknown Device
     USB USB\VID_8086&PID_1122\5&16DC22A8&0&2                        : Generi
SB Hub
     找不到文件 - input.inf
     WDC WD400BB-00JHC0

     请选择要更新的设备名,模糊输入连续5个以上字节↘








不会用

2007-11-8 13:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 11 楼』:  

我也刚发现,全部备份的就会出现这个情况,汗啊,待修正....
模糊输入即NVIDIA GeForce4 MX 440 (Microsoft Corporation)只要输入NVIDIA

[ Last edited by fastslz on 2007-11-8 at 02:04 PM ]



第一高手    第二高手

2007-11-8 14:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
hello547rf44
初级用户





积分 172
发帖 63
注册 2007-11-3
状态 离线
『第 12 楼』:  

不错,不错。建意另外加个auto参数。能以静默方式还原Drives目录下的所有驱动。(即使个别错误也不提示)如果这个也能实现的话,再建意“备份驱动.bat”和“还愿驱动”加上个压缩包功能。把所有的驱动打包为mydirves.zip类似的一个文件。还原的话就先将它解开。哇,这样的话,不用过多久,那此GHOST系统之类的装机光盘又有的更新了。哈哈。
这么好的贴子为什么不加精呢?

2007-11-8 14:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
sh2288
新手上路





积分 4
发帖 2
注册 2007-10-30
状态 离线
『第 13 楼』:  

高手啊!!我只用这个工具切换网卡!!
一个网卡是boardcom,一个是8139的.因为一个是内部一个是外部所以手动麻烦啊!!

devcon disable *DEV_1677* >nul
devcon enable *DEV_8139* >nul

2007-11-8 15:39
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 14 楼』:  



  Quote:
Originally posted by hello547rf44 at 2007-11-8 14:25:
不错,不错。建意另外加个auto参数。能以静默方式还原Drives目录下的所有驱动。(即使个别错误也不提示)如果这个也能实现的话,再建意“备份驱动 ...

还原还要驱动优化,这个就当是临时还原脚本吧。压缩是最简单的直接调用
start winrar.exe u -ep1 -m5 -r .\MyDrivers.rar .\*
至于ghost系统吧我是不感冒,但是驱动和硬件ID收集够多完全能做到,我倒喜欢系统安装时外挂脚本安装驱动

  Quote:
Originally posted by sh2288 at 2007-11-8 15:39:
高手啊!!我只用这个工具切换网卡!!
一个网卡是boardcom,一个是8139的.因为一个是内部一个是外部所以手动麻烦啊!!

devcon disable *DEV_1677* >nul
devcon enable *DEV_8139* >nul

确实是个好办法,象你这样的情况很普遍,呵呵现在有新招了。。。。



第一高手    第二高手

2007-11-8 17:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
fastslz
铂金会员

DOS一根葱


积分 5493
发帖 2315
注册 2006-5-1
来自 上海
状态 离线
『第 15 楼』:  


@echo OFF
title 还原更新(驱动精灵)备份项目
::::::相关讨论:   http://www.cn-dos.net
::::::网上论坛:  http://groups.google.com/group/fastslz
::::::个性空间:   http://space.cech.com.cn/fastslz
if not %OS%==Windows_NT (cls&echo.&color 4E&echo  此程序必须在Windows NT或2000以上操作系统上运行&ping/n 5 127.1>nul&EXIT)
devcon.exe>nul 2>nul
if %errorlevel%==9009 (cls&echo.&color 0E&echo 本脚本需要微软 DevCon.exe 命令行实用工具支持&ping/n 5 127.1>nul&EXIT)
set log="Drivers\%~n0.log"
set Tempfile="%Temp:"=%.\fast.slz"
set count=0
del "Drivers\*.log" 2>nul
del %Tempfile% 2>nul
cls&color 0b
echo.
echo  正在全盘搜索(驱动精灵)备份项目信息,这个可能持续较长时间,请稍等...
setlocal enabledelayedexpansion
for /f "delims=\" %%i in ('fsutil fsinfo drives^|find /v "a"') do (
    set var=%%i
    set drive=!var:~-2!
    fsutil fsinfo drivetype !drive!\|find /v "-ROM">nul &dir /s /b /a-d !drive!\Driver.nfo>>%Tempfile% 2>nul
    )
for /f "delims=*" %%i in ('type %Tempfile%^|find /i /v "RECYCLE"') do type "%%i"|find /i "InfFile">nul 2>nul
if %errorlevel%==1 cls&echo.&color 0e&echo  在所有本地磁盘、及移动磁盘上未发现(驱动精灵)备份项目信息&echo  如果驱动文件已压缩请解压文件到任意位置,再运行本脚本&ping/n 10 127.1>nul&exit/b

:::::goto Driver_start
Wprompt "提示信息" "按下确定开始还原驱动精灵已备份的项目,需要单个恢复模式脚本请联系本人   " OkCancel 2 ?
if %errorlevel%==2 color 0e&echo  用户取消操作 . . .&ping/n 3 127.1>nul&exit/b

:Driver_start
cls
for /f "delims=*" %%i in ('type %Tempfile%^|find /i /v "RECYCLE"') do (
    for /f "tokens=1* delims==" %%a in ('type "%%~i"^|find /i "DriverName"') do (
        for /f "tokens=1* delims==" %%e in ('type "%%~i"^|find /i "InfFile"') do (
            for /f "tokens=1* delims==&" %%k in ('type "%%~i"^|find /i "HardwareID"') do (call :startdriver "%%b" "%%~dpi%%f" "%%l")
        )
    )
)
del %Tempfile% 2>nul
echo.
echo  一共更新了 %count% 项设备驱动
echo.
echo  按任意键退出. . .&pause>nul

:startdriver
set "ID=%~3"
set "typename=%~1"
if not defined typename goto:eof
set/p=正在更新--^> "%typename:~0,47%"<nul
if not exist "%~2"  echo 没有对应项,执行下一项目 . . .&ping/n 2 127.1>nul&goto:eof
rem 如果不能成功更新,尝试下一for语句delims=上加符号&
for /f "delims=" %%m in ('echo."%ID%"') do devcon updateNI "%~2" "%%~m">nul
if %errorlevel%==0 color 0e&echo  ^<--设备驱动已更新&ping/n 1 127.1>nul&color 0b
if %errorlevel%==1 color 0e&echo  ^<--已更新提示重启&ping/n 1 127.1>nul&color 0b
if %errorlevel%==2 color 0e&echo  ^<--提示更新失败!&echo 原因未正确判断出硬件ID,或驱动源不正确。&ping/n 1 127.1>nul
if %errorlevel%==3 color 0e&echo  DevCon语法错误。&ping/n 1 127.1>nul
set /a "count=%count%+1"
del %Tempfile% 2>nul
endlocal&(set count=%count%)
goto:eof
[ Last edited by fastslz on 2008-1-17 at 10:26 PM ]



第一高手    第二高手

2007-11-13 14:07
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] [5] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: