批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

[系统增强] 纯批处理脚本备份、还原驱动增强版(2014-01-18最新版本已发布)

本帖最后由 fastslz 于 2014-1-18 10:40 编辑

2014年新版本已修复所有可能出现的BUG
1:解决重复备份
2:增加Windows 6.*系列完美支持
3:完善x64 x86兼容性
4:恢复驱动时同时恢复相匹配的父系设备ID
5:Devcon.exe更新版本6.2.9200.16384


已知情况
Windows 6.*系列原生系统备份完整率99%,精简或深度优化版85%+
USB设备如打印机、键盘、鼠标等因为规范很多所以未做特别优化,所以备份恢复成功率85%+


说明:
  不能说此脚本比驱动精灵更完美,但它确实弥补了驱动精灵的不足!
  支持Windows XP、Windows 2003、,Windows Vista x86&x64 Windows 7 x86&x64 Windows 2008 x86&x64
  已经是完美版本了,备份速度优于其它程序。

1、支持备份完整的WHQL数字签名(我手头的驱动精灵 2005专业版就不支持)。
2、智能判断系统中已安装的驱动程序,且只备份用户自行安装的驱动,若该设备包含WHQL数字签名则打印信息。
3、支持驱动文件打包存放,双击单个以设备名命名的.EXE自解压方式还原驱动,还原驱动就如此轻松。
4、支持宁静默方式外挂安装更新驱动,方便系统集成、Ghost用户调用。
5、兼容驱动精灵已备份的项目,也就是说运行一下脚本就还原驱动精灵曾经备份的项目。
  还原方法将DevUpdate.Cmd Tools 放在精灵已备份驱动文件目录里,运行DevUpdate.Cmd
6、源代码公开化没作任何加密,只要你也略懂脚本完全自行修改达到自己的所需!不要改头换面就好;-)
7、优化NVIDIA显卡驱动,NVIDIA GeForce 6800以上最新驱动备份成功率90%以上,就怕是精简的驱动

子程序说明
x86\Devcon.exe-----------最新版6.2.9200.16384 微软代替设备管理器命令行实用工具Devcon
x64\Devcon.exe-----------最新版6.2.9200.16384 微软代替设备管理器命令行实用工具Devcon x64
Sleep.exe-------------------用于批处理暂停或等待用户按一个键
echoX.exe------------------用于批处理显示彩色字符
Update.cmd----------------更新设备驱动代码
Dev.sfx---------------------用于制作集成驱动的自解压模块
7z.exe----------------------7-zip命令行独立版压缩工具
7z.dll-----------------------7-zip命令行独立版DLL库文件
DevUpdate.cmd-----------用未打包文件批量自动更新驱动
DevUpdate-Sfx.cmd------用打包的exe文件批量自动更新驱动

任何建议和意见及BUG递交欢迎访问以下地址
http://bbs.bathome.net/
http://www.cn-dos.net/forum
[原创]借助DevCon纯脚本备份驱动
http://www.cn-dos.net/forum/viewthread.php?tid=35139

任何建议和意见及BUG递交欢迎访问以下地址
http://bbs.bathome.net/
http://www.cn-dos.net/forum
[原创]借助DevCon纯脚本备份驱动
http://www.cn-dos.net/forum/viewthread.php?tid=35139




新BUG反馈
http://www.bathome.net/redirect. ... 430&fromuid=277

Dev2014-01-18.rar 最新版本!
http://pan.baidu.com/share/link? ... 1&uk=2315442412
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
11

评分人数

相关BUG汇总及处理方法!!!!!

本帖最后由 fastslz 于 2014-1-2 15:24 编辑

目前未发现严重BUG,如有BUG欢迎跟贴,代码的稳定性离不开各位的发现和支持
新BUG反馈
http://www.bathome.net/redirect. ... 430&fromuid=277

TOP

vbs部分权限不够或无wmi库

  1. On Error Resume Next
  2. Set WMI = GetObject("winmgmts:")
  3. Set aItems = WMI.ExecQuery("Select * from Win32_PnPSignedDriver")
  4. For Each aItem in aItems
  5.     If Instr(aItem.InfName,Chr(111)&Chr(101)&Chr(109)) > 0 Then
  6.         Wscript.Echo aItem.DeviceName & "," & aItem.HardWareID & "," _
  7.                     & BakPath&DevName & "," & aItem.InfName
  8.     End If
  9. Next
复制代码

试试这段代码提示什么?

[ 本帖最后由 fastslz 于 2008-3-19 16:56 编辑 ]

TOP

封印 你的VISTA有希望的,找出这个问题根源了,namejm 也不死心想用纯批处理,这次在稳定的基础上尽量满足你们俩吧

TOP

纯批的请测试...
  1. @echo off
  2. Title 欢迎使用批处理之家(备份驱动脚本) BY: fastslz
  3. :::网上论坛: http://bbs.bathome.net/
  4. :::个性空间: http://groups.google.com/group/fastslz
  5. Set Tools=%~dps0Tools
  6. if not %OS%==Windows_NT (color 0c&%Tools%\sleep.exe -k -p "此程序必须在Windows NT或XP以上操作系统上运行" 10&exit)
  7. %Tools%\devcon.exe>nul 2>nul
  8. if %errorlevel%==9009 (color 0c&%Tools%\sleep.exe -k -p "本脚本需要微软 %Tools%\devcon.exe 命令行实用工具支持" 10&exit)
  9. set Tempfile="%Temp:"=%.\fast.slz"
  10. set "BakPath=%~dp0Drivers"
  11. del %Tempfile% 2>nul
  12. cls&color 0b&set count=0
  13. echo 正在收集设备信息,请稍等...
  14. for /f "skip=1 tokens=2,3,4 delims=," %%a in ('Wmic Path Win32_PnPSignedDriver where "infname like 'oem%%'" get infname^,DeviceName^,HardWareID /format:csv') do >>%Tempfile% echo."%%a","%%b","%%c"|more>nul
  15. dir /ad "%BakPath%" >nul 2>nul||MD "%BakPath%"
  16. for /f "tokens=1,2,3 delims=," %%i in ('type %Tempfile%^|find /i "oem"') do call :DevStart %%i %%j %%k
  17. del %Tempfile% 2>nul
  18. echo.
  19. %Tools%\sleep.exe -p "备份已完成!一共备份了 %count% 项设备驱动" 3
  20. echo.&color 0a
  21. %Tools%\sleep.exe -k -p "按下任意键开始打包集成驱动,15秒内未做选择默认自动退出" 15
  22. if %errorlevel%==0 exit/b0
  23. for /f "delims=*" %%a in ('dir /s/a-d/b Driver.nfo 2^>nul') do call :Pack "%%a"
  24. cls&echo.&color 0b
  25. %Tools%\sleep.exe -k -p "打包已完成!10 秒后自动退出" 10
  26. exit
  27. :DevStart
  28. if "%~1"=="" goto:eof
  29. color 0e
  30. if %count% equ 0 cls
  31. setlocal enabledelayedexpansion
  32. Set "DeviceName=%~1"
  33. Set "DevName=!DeviceName:/= !"
  34. Set "DevName=!DevName:\= !"
  35. Set "DevName=!DevName:?= !"
  36. Set "DevName=!DevName:|= !"
  37. Set "DevName=!DevName:>= !"
  38. Set "DevName=!DevName:<= !"
  39. Set "DevName=!DevName:^*= !"
  40. set "HardWareID=%~2"
  41. set "HardWareID=!HardWareID:&amp;=&!"
  42. dir /ad "%BakPath%\%DevName%" >nul 2>nul||MD "%BakPath%\%DevName%"
  43. >"%BakPath%\%DevName%\Driver.nfo" set /p=DeviceName=%DeviceName%<nul
  44. >>"%BakPath%\%DevName%\Driver.nfo" echo.
  45. >>"%BakPath%\%DevName%\Driver.nfo" set /p="HardWareID=%HardWareID%"<nul
  46. >>"%BakPath%\%DevName%\Driver.nfo" echo.
  47. >>"%BakPath%\%DevName%\Driver.nfo" set /p="InfName=%~3"<nul
  48. set/p=正在备份--^> "%~1"<nul
  49. For /F "skip=1 tokens=*" %%i in ('%Tools%\devcon.exe Driverfiles "%HardWareID%"^|find ":\"') do xcopy /h/r/y %%~si "%BakPath%\%DevName%" >nul 2>nul
  50. xcopy /h/r/y "%Systemroot%\Inf\%~3" "%BakPath%\%DevName%" >nul 2>nul
  51. if errorlevel 0 set /a "count=%count%+1"
  52. set "InfName=%~n3"
  53. for /f "tokens=1* delims== " %%k in ('type "%Systemroot%\Inf\%InfName%.inf"^|find /i ".Cat"^|find /v "64"') do set "OemName=%%~nl"
  54. if defined OemName (
  55.    for /f "delims=*" %%a in ('dir /s/b/a-d "%SystemRoot%\system32\CatRoot\%InfName%.cat" 2^>nul') do set "catfile=%%~a"
  56.    if not defined catfile for /f "delims=*" %%k in ('dir /s/b/a-d "%SystemRoot%\%OemName%.cat" 2^>nul') do set "catfile=%%~k"
  57. )
  58. if defined catfile (
  59.    set "InfName=%OemName%"
  60.    xcopy /h/r/y "%catfile%" "%BakPath%\%DevName%\">nul 2>nul
  61.    if errorlevel 0 echo  含WHQL数字签名
  62.    attrib -s -h -r "%BakPath%\%DevName%\%InfName%.*">nul
  63.    copy /y "%BakPath%\%DevName%\Driver.nfo" "%BakPath%\%DevName%\Driver.bak">nul 2>nul
  64.    type "%BakPath%\%DevName%\Driver.bak"|find /v "InfName=">"%BakPath%\%DevName%\Driver.nfo"
  65.    >>"%BakPath%\%DevName%\Driver.nfo" echo InfName=%OemName%.inf&del "%BakPath%\%DevName%\Driver.bak" 2>nul
  66.    move /y "%BakPath%\%DevName%\%InfName%.inf" "%BakPath%\%DevName%\%OemName%.inf">nul 2>nul
  67.    move /y "%BakPath%\%DevName%\%InfName%.cat" "%BakPath%\%DevName%\%OemName%.cat">nul 2>nul
  68. )
  69. endlocal&set count=%count%
  70. goto:eof
  71. :Pack
  72. if "%~1"=="" goto:eof
  73. set "DriverPath=%~dp1"
  74. set "Name=%DriverPath:~0,-1%"
  75. for /f "delims=*" %%a in ("%Name%.tmp") do set "Name=%%~na"
  76. cls&echo 正在集成 %Name% 驱动包请稍等...
  77. %Tools%\7za.exe a -sfxdev.sfx "%Name%.exe" "%DriverPath%*.*" "%Tools%\devcon.exe" "%Tools%\sleep.exe" "%Tools%\Update.cmd"
  78. rem rd /s/q "%DriverPath%"
  79. goto:eof
复制代码

[ 本帖最后由 fastslz 于 2009-4-12 20:09 编辑 ]

TOP

+ ■ 硬件支持   (简直榨干了) 能用才怪
nLite 以修改inf文件达到目的的,不知道它去掉了哪部分....

TOP

1:GHOST版、精简版适合哪些人呢?
2:制作精简版GHOST版的人自己是否在用精简版的?
菜鸟喜欢GHOST版、精简版这是无疑的,高手喜欢折腾的就不会用这些系统。
所以我特别喜欢龙卷风系列作品,即使精简也要又个尺度。
纯DOS下备份Windows的驱动!几乎不可能,谁做谁找罪受。WinPE下可以考虑热备份Windows下驱动,但是很难做出还原脚本。

TOP

还原脚本用你的方式就可以了
这个就要依赖vbs或devcon,我的2个代码前者是利用devcon后者用vbs WmiService,除这2种方法,就用DDK函数库,要说明的是devcon也是微软DDK工具成员之一(全称Windows Driver Development Kit,即驱动程序开发工具包)
我说热备份是什么意思就是直接读inf提取驱动文件,但无法获得硬件ID,举例你看下NV4_DISP.inf纪录了多少硬件ID,提取哪个好呢?

TOP

Const HKEY_LOCAL_MACHINE = &H80000002
strKeyRoot = HKEY_LOCAL_MACHINE
Regpath = "HKEY_LOCAL_MACHINE"

strComputer = "."
Set objRegistry = GetObject("winmgmts:\\" & strComputer & "\root\default:StdRegProv")

strKeyPath = "SYSTEM\CurrentControlSet\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}"
objRegistry.EnumKey strKeyRoot, strKeyPath, arrSubKeys
For Each subkey In arrSubKeys
    aKeyPath=strKeyPath&"\"&subkey
    objRegistry.EnumValues HKEY_LOCAL_MACHINE, aKeyPath, arrValueNames
        objRegistry.GetStringValue HKEY_LOCAL_MACHINE,aKeyPath,"InfSection",strValue
        Wscript.Echo strValue
        if StrComp(arrValueNames(i),"InfSection",1) = 0 Then InfSection=strValue
Next
Wscript.Echo InfSection
我之前早就测试了截取注册表InfSection安装节点  rundll32能安装能CopyFiles,所有都成功结果硬件还是没有安装成功。上面的是我的测试代码的其中一段,你自己玩玩吧

TOP

回复 25楼 的帖子

其它的驱动一律报什么ID错,可能原因是这些设备是手动安装的设备,这类设备用devcon UpdateNI更新会提示失败的,试试devcon install 手动安装命令
卡巴的某个驱动不属于硬件驱动所以无法备份,同样道理若能备份的话同样也能备份备份病毒的.sys了

请测试新的DevUpdate.cmd
  1. @echo off
  2. Title 批处理之家(还原驱动脚本) BY: fastslz
  3. :::网上论坛: http://bbs.bathome.net/
  4. :::个性空间: http://groups.google.com/group/fastslz
  5. Set "Tools=%~dps0Tools"
  6. for %%a in (Devcon.exe,Sleep.exe) do (
  7.     dir /a-d/b %Tools%\%%a>nul 2>nul||color fc&&echo 子程序 %Tools%\%%a 未发现请重新下载!&&pause&&exit)
  8. )
  9. setlocal enabledelayedexpansion
  10. for /f "delims=*" %%a in ('dir /s/a-d/b Driver.nfo 2^>nul') do call :Update "%%a"&set "Ini=%%a"
  11. if not defined Ini color 0c&echo 读取 Drivers 子目录下 Driver.nfo 错误!&%Tools%\Sleep.exe 5&exit
  12. %Tools%\sleep.exe -k -p "10 秒后自动退出" 10
  13. exit
  14. :Update
  15. set "FilePath=%~dp1"
  16. for /f "tokens=*" %%i in (%~s1) do set "%%i"
  17. color 0e
  18. echo 正在更新--^> "%DeviceName%"
  19. %Tools%\Devcon.exe updateni "%FilePath%%InfName%" "%HardWareID%" >nul 2>nul
  20. if %errorlevel%==0 echo 设备驱动已成功更新。&echo.
  21. if %errorlevel%==1 echo 设备驱动已更新,需要重新启动更改设置!&echo.
  22. if %errorlevel%==2 goto err2
  23. if %errorlevel%==3 echo DevCon语法错误。&echo.
  24. goto:eof
  25. exit
  26. :err2
  27. echo 更新失败!原因未正确判断出硬件ID,或无法访问该硬件ID。
  28. %Tools%\Sleep.exe -k -p "5秒后执行手动安装命令,按下任意键忽略此错误" 5
  29. if %errorlevel%==1 exit/b0
  30. %Tools%\Devcon.exe install "%FilePath%%InfName%" "%HardWareID%" >nul 2>nul
  31. if %errorlevel%==0 echo 设备驱动已成功更新。&echo.
  32. if %errorlevel%==1 echo 设备驱动已更新,需要重新启动更改设置!&echo.
  33. if %errorlevel%==2 echo 更新失败!原因未正确判断出硬件ID,或无法访问该硬件ID。&echo.
  34. if %errorlevel%==3 echo DevCon语法错误。&echo.
  35. sleep.exe -k -p "5 秒后自动退出" 5
复制代码
请测试新的Update.cmd
  1. @echo off
  2. Title 欢迎使用批处理之家(还原驱动脚本) BY: fastslz
  3. :::网上论坛: http://bbs.bathome.net/
  4. :::个性空间: http://groups.google.com/group/fastslz
  5. set "FilePath=%~dp0"
  6. for /f "tokens=*" %%i in (Driver.nfo) do set "%%i"
  7. color 0e
  8. echo 正在更新--^> "%DeviceName%"
  9. %Tools%\Devcon.exe updateni "%FilePath%%InfName%" "%HardWareID%" >nul 2>nul
  10. if %errorlevel%==0 echo 设备驱动已成功更新。&echo.
  11. if %errorlevel%==1 echo 设备驱动已更新,需要重新启动更改设置!&echo.
  12. if %errorlevel%==2 goto err2
  13. if %errorlevel%==3 echo DevCon语法错误。&echo.
  14. sleep.exe -k -p "5 秒后自动退出" 5
  15. goto:eof
  16. exit
  17. :err2
  18. echo 更新失败!原因未正确判断出硬件ID,或无法访问该硬件ID。
  19. %Tools%\Sleep.exe -k -p "5秒后执行手动安装命令,按下任意键忽略此错误" 5
  20. if %errorlevel%==1 exit/b0
  21. %Tools%\Devcon.exe install "%FilePath%%InfName%" "%HardWareID%" >nul 2>nul
  22. if %errorlevel%==0 echo 设备驱动已成功更新。&echo.
  23. if %errorlevel%==1 echo 设备驱动已更新,需要重新启动更改设置!&echo.
  24. if %errorlevel%==2 echo 更新失败!原因未正确判断出硬件ID,或无法访问该硬件ID。&echo.
  25. if %errorlevel%==3 echo DevCon语法错误。&echo.
  26. sleep.exe -k -p "5 秒后自动退出" 5
复制代码

TOP

TOP

原帖由 ttj36 于 2008-7-1 12:03 发表
请问修复WMI组件能不能做个包,精简版本现在太多了,

其实WMI组件包我早已准备,只是未确定是否适合简版系统,那些所为精简ghost版本我懒得装上一试:L


原帖由 ttj36 于 2008-7-1 18:00 发表
还有能不能把驱动文件打包存放在一个单独的文件夹中

解压到子目录就是单独的文件夹了

TOP

就因为精简版XP解决方法,今天破例下载了ghost精简版XP折腾半天,百般测试无果,在一筹莫展的情况下最后一试终于找到问题所在!!
解决方法先留一玄机给大家破吧:p,日后重新发布完全支持精简版XP的代码
玄机的秘密:以下代码在非精简版XP运行,且运行时间较长.....
  1. @echo off
  2. strings.exe /accepteula >nul 2>nul
  3. for /f "delims=*" %%a in ('dir/s/a-d/b C:\Windows\*.dll') do (
  4. strings.exe "%%a"|find /i "PnPSignedDriver"&&echo "%%a"
  5. )
  6. pause
复制代码
无法上传附件strings.exe可以到http://download.sysinternals.com/Files/Strings.zip下载

[ 本帖最后由 fastslz 于 2008-7-3 02:30 编辑 ]

TOP

2008-7-4更新说明:支持精简XP,修正恢复驱动不能完全更新的BUG,稳定版本!没有严重的BUG这个版本将不再更新....

TOP

会不会被杀软杀了??

TOP

返回列表