Board logo

标题: [系统增强] 纯批处理脚本备份、还原驱动增强版(2022-10-29更新) [打印本页]

作者: fastslz    时间: 2008-3-19 11:14     标题: 纯批处理脚本备份、还原驱动增强版(2022-10-29更新)

2楼更新Windows10以上全新备份还原方式

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

[attach]87[/attach]
[attach]88[/attach]
[attach]89[/attach]

链接:https://pan.baidu.com/s/1ypt61Pgyq0hlnCryGdapNQ?pwd=6666
提取码:6666

作者: fastslz    时间: 2008-3-19 12:34     标题: 更新Windows10以上全新备份还原方式

本帖最后由 fastslz 于 2022-10-29 10:47 编辑

  1. @echo off&(PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||(PowerShell -Command "Start-Process '%~sdpnx0' -Verb RunAs"&&EXIT)
  2. rem 提取所有驱动
  3. pushd "%CD%"&cd /d "%~dp0"
  4. title "%~n0"
  5. :SetupChipset.exe -overall -downgrade -s -norestart
  6. md "%~d0\DevBackup"
  7. rem pnputil不支持中文目录所以导出驱动再移动过来
  8. pnputil /export-driver * "%~d0\DevBackup"
  9. move "%~d0\DevBackup" .\
  10. timeout /t 10
复制代码


  1. @echo off&(PUSHD "%~DP0")&(REG QUERY "HKU\S-1-5-19">NUL 2>&1)||(PowerShell -Command "Start-Process '%~sdpnx0' -Verb RunAs"&&EXIT)
  2. pushd "%CD%"&cd /d "%~dp0"
  3. title "%~n0"
  4. rem 安装所有驱动
  5. for /r "%~dp0DevBackup\" %%i in (*.inf) do pnputil /add-driver "%%~i" /install
  6. timeout /t 20
复制代码

作者: chishingchan    时间: 2008-3-19 12:57

期待已久,下载中...
作者: chishingchan    时间: 2008-3-19 14:38     标题: 初测:备份已完成!一共备份了 0 项设备驱动

备份已完成!一共备份了 0 项设备驱动
查错中...

发现 Cscript //Nologo Dev.Vbs /y 没有返回任何信息:
echo 正在收集设备信息,请稍等...
for /f "tokens=1,2,3,4 delims=," %%a In ('Cscript //Nologo Dev.Vbs /y') do call :DevStart "%%~a" "%%~b" "%%~c" "%%~d"
修改为以下内容后,没有任何显示的。
for /f "tokens=1,2,3,4 delims=," %%a In ('Cscript //Nologo Dev.Vbs /y') do echo "%%~a" "%%~b" "%%~c" "%%~d"
pause
作者: youxi01    时间: 2008-3-19 16:09

希望大家广为参与测试
以便程序的完善

拟程序完善之后,将之加为精华
作者: fastslz    时间: 2008-3-19 16:48

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 编辑 ]
作者: chishingchan    时间: 2008-3-19 17:01     标题: 使用精简系统的朋友请注意了!

我的系统是精简过的,不成功的用完整的系统试试吧!

[ 本帖最后由 chishingchan 于 2008-3-19 17:35 编辑 ]
作者: 随风    时间: 2008-3-19 20:18

虽然我不懂,但还是要赞一个
楼主知识全面啊!
佩服中。。。
作最实用的网站,就要靠这样的人。
期待更多的作品。
作者: foxJL    时间: 2008-3-19 22:10

超赞!
向楼主学习.
作者: 封印    时间: 2008-3-19 23:38

大葱,我来顶你来了。。。这东西不适合VISTA有点遗憾
作者: fastslz    时间: 2008-3-20 10:32

封印 你的VISTA有希望的,找出这个问题根源了,namejm 也不死心想用纯批处理,这次在稳定的基础上尽量满足你们俩吧
作者: chishingchan    时间: 2008-3-20 13:06     标题: 大难题啊!捣不定!

重新安装WMI组件 已经做了;
修复WMI组件时 (我的系统装在 D 盘的,将 cd c: 改为 %SystemDrive%或者不需要吧?!)
在 Windows Management Instrumentation 服务已成功停止。下
有一行:无效全局开关。
结果跟未修复时是一个样的。

系统使用这个方案精简的:http://bbs.deepin.org/read.php?tid=443890
懂精简的不妨提个意见:还要保留什么组件或服务?
下面是被精简掉的服务列表:
√ Application Layer Gateway
√ DNS 客户端
√ IMAPI 光盘刻录服务
√ IPSEC 服务
√ Messenger
√ Qos 数据包计划程序
√ RPC 定位器
√ TCP/IP NetBIOS 助手
√ Telnet
√ Windows 时间
√ 不间断电源供应 (UPS)
√ 错误报告服务
√ 二次登陆
√ 分布式链接跟踪客户端
√ 服务公告协议 (SAP)
√ 简单 TCP/IP 服务
√ 警报器
√ 卷影复制
√ 路由监听服务
√ 索引服务
√ 通用即插即用设备
√ 网络动态数据交换 (DDE)
√ 网络客户端
√ 系统还原服务
√ 远程注册表
√ 质量服务资源预订协议
√ 自动更新

[ 本帖最后由 chishingchan 于 2008-3-20 13:22 编辑 ]
作者: fastslz    时间: 2008-3-20 13:29

纯批的请测试...
  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 编辑 ]
作者: fastslz    时间: 2008-3-20 13:56

+ ■ 硬件支持   (简直榨干了) 能用才怪
nLite 以修改inf文件达到目的的,不知道它去掉了哪部分....
作者: chishingchan    时间: 2008-3-21 10:42     标题: 13 楼在精简系统下的测试结果:

正在收集设备信息,请稍等...
节点 - XP
错误:
描述 = 提供程序加载失败
系统找不到指定的文件。

备份已完成!一共备份了 0 项设备驱动

按下任意键开始打包集成驱动,15秒内未做选择默认自动退出



带有 Wmic Path Win32_PnPSignedDriver where 语句的跟前无分别


+ ■ 硬件支持 (被精简掉的东西)
    √ Brother 设备
    √ Gravis 数字游戏端口
    √ Iomega Zip 设备
    √ Ramdisk
    √ Windows CE USB 主机
    √ 多端口串行适配器
    √ 智能卡

[ 本帖最后由 chishingchan 于 2008-3-21 10:57 编辑 ]
作者: chishingchan    时间: 2008-3-21 10:47

原帖由 fastslz 于 2008-3-20 13:56 发表
+ ■ 硬件支持   (简直榨干了) 能用才怪
nLite 以修改inf文件达到目的的,不知道它去掉了哪部分....


现在装机的不是精简版就是GHOST版,GHOST版也是精简版,精简系统是大势所趋的!
此程序的兼容性无论在方式或方法上要追求比驱动精灵的兼容性更好,兼容性更好的更可以在纯DOS下备份Windows的驱动!
作者: fastslz    时间: 2008-3-21 11:09

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

还原脚本用你的方式就可以了,其实纯DOS下有很多辅助软件,只是没有一一去尝试去学习。
就算真的可以在DOS下备份,我也不赞成在DOS下去做。只不过是想说明一下兼容性而已。
在DOS联盟的脚本修改一下不就成了吗?放弃VBS吗,否则也会带来兼容性问题(相对于精简版)。则用最简单的语句,不用某些东西支持的语句就好。

先讲这么多先,下次再讲。
作者: fastslz    时间: 2008-3-21 12:03

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

1、获得INF文件名称:HKLM\SYSTEM\LastKnownGoodRecovery\LastGood.Tmp
或 DIR %WinDir%\Inf\oem*.inf
2、查询 oem*.inf 文件在 KLM\SYSTEM\CurrentControlSet\Control\Class 里的位置
例如位置在{8-4-4-4-12}\0000
InfPath=安装文件名称
DriverDesc=硬件名称
MatchingDeviceId=硬件ID
InfSection=文件安装项

例如文件安装项是[abcd]
安装项下CopyFiles=[要复制文件的项]

[ 本帖最后由 chishingchan 于 2008-3-21 13:50 编辑 ]
作者: fastslz    时间: 2008-3-21 19:20

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,所有都成功结果硬件还是没有安装成功。上面的是我的测试代码的其中一段,你自己玩玩吧
作者: chishingchan    时间: 2008-3-21 23:11

我对 vbs 一窍不通,研究什么?
用 REG 命令配合 FOR 及 FIND 等试试吧
作者: 553850000    时间: 2008-3-28 19:12

还以为真的是纯脚本,晕
作者: chishingchan    时间: 2008-4-19 23:22

楼主的程序真的没有对精简版XP有改善的余地?
作者: chishingchan    时间: 2008-4-30 11:04

XP SP3 完整版
备份是可以了,但是还有点问题!
系统装有卡巴,卡巴装有一个驱动,备份连卡巴的驱动也备份了。
除了网卡能自动恢复外,其它的驱动一律报什么ID错。
作者: fastslz    时间: 2008-5-3 12:12     标题: 回复 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
复制代码

作者: gavincwb    时间: 2008-5-21 09:23

好东西啊
谢谢楼主分享了
作者: savior0201    时间: 2008-6-8 21:11

为什么收集设备信息n久?
作者: 杨风    时间: 2008-6-21 15:30

好强~~~~学习中!
作者: ttj36    时间: 2008-6-27 12:21

楼主呀,我找你好久了,从批处理联盟论坛就关注你了,后来要DOS联盟论坛找到你,我说怎么不更新了,我还用,1月份你那个,批处,这次又要这看到你了,你可能跑,哈哈,这次看来更新了不少呀,用用看,
作者: ttj36    时间: 2008-6-27 13:33

这个版本很好用,

[ 本帖最后由 ttj36 于 2008-6-27 14:04 编辑 ]
作者: ttj36    时间: 2008-6-27 20:11

高手呀,Dev.sfx文件是怎么做的,高手,你连安装前提示信息。也放里面了,
作者: fastslz    时间: 2008-6-30 17:47

脚本之家引用页
http://www.jb51.net/article/14988.htm
作者: ttj36    时间: 2008-7-1 12:03

请问修复WMI组件能不能做个包,精简版本现在太多了,
作者: ttj36    时间: 2008-7-1 18:00

还有能不能把驱动文件打包存放在一个单独的文件夹中
作者: fastslz    时间: 2008-7-2 12:27

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

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


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

解压到子目录就是单独的文件夹了
作者: ttj36    时间: 2008-7-2 21:01

放出来。我们帮你试试,
我说打完包的驱动,现在在根目录下,怎么才能放到子目录下,
作者: fastslz    时间: 2008-7-3 02:26

就因为精简版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 编辑 ]
作者: fastslz    时间: 2008-7-4 21:28

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

老大很好用,不过,还是有点问题,备份了一半DevBackup.cmd,自动跳掉了,l连"备份已完成!一共备份了 %count% 项设备驱动"也没出来,就跳掉了,

[ 本帖最后由 ttj36 于 2008-7-6 10:58 编辑 ]
作者: fastslz    时间: 2008-7-6 14:56

会不会被杀软杀了??
作者: ttj36    时间: 2008-7-6 18:28

不会吧,杀软没跳出来,我在看看,那台是精减系统,在家里那台很好用,
我看在加上一个批处,在备份之前清空一下Drivers文件夹,我不知道加在哪里好,有没有好点批处

rmdir Drivers /s/q


还有能不能7za创建自释放档案到指定文件夹   也就是说把驱动打包放到一个指定的文件夹下,

[ 本帖最后由 ttj36 于 2008-7-6 21:59 编辑 ]
作者: itrui    时间: 2008-8-3 00:51

我对楼主的佩服有如长江之水,连绵不绝。
作者: Clark2505    时间: 2008-8-6 11:02     标题: 问题

我运行后显示
正在备份--> "RADEON X300/X550 Series"

只有这一个显示,然后就没有反应了。
是我等的时间还不够吗??
我用的不是精简版的系统。
作者: jipinshangren    时间: 2008-8-17 17:59

好作品,佩服!希望能有一天到你们的高度!加油中!
作者: huguocheng    时间: 2008-8-18 15:02

真强,收藏了!!!!
作者: itljl    时间: 2008-9-19 17:02

支持楼主。好贴。。。
作者: connie    时间: 2008-9-20 18:49     标题: 是期待

顶楼主狂顶!!!!!!!!!真是期待的
作者: yellow881    时间: 2008-11-28 15:58

很好,我也支持一下,对批处理我不懂,对AU3有稍稍了解对于WIM的问题,对AU3来说很好解决或是说根本就没问题
作者: yellow881    时间: 2008-11-28 16:57

我用了一下,恢复大部份失效~~~~真有点失望。
刚刚开始是备份不成功,后来换成7.14发布的就OK了,可以备份了。
但恢复的时候就老弹出没有通过什么什么验证了,汗
作者: zhoutong    时间: 2008-12-23 10:53

感谢分享,确实是好东西!
作者: nanoking    时间: 2009-1-5 03:59

不得不服!已经测试过,很好用!
作者: p05401144    时间: 2009-1-8 14:50

支持
看样子俺还是先学好基础知识在来这里吧
作者: ncn2988    时间: 2009-1-10 18:17

路过学习!看见精华收藏,,,感谢楼主分享
作者: 心愿怕人    时间: 2009-1-28 15:52     标题: 高手

我顶!啥时候,我也是高手啊?呵呵
作者: 心愿怕人    时间: 2009-1-31 17:39

佩服,我虽然不太懂!但是确实好东西
作者: 9zhmke    时间: 2009-2-5 01:07

想在自制的装机优化工具中集成这个批处理,可否?
作者: 9zhmke    时间: 2009-2-6 00:19

哈哈,找到个BUG,从wmic读出的数据中有极少数硬件自带一个末尾空格,但程序默认末尾无空格,所以把以下内容应改动一下:
for /f "tokens=1,2,3 delims=," %%i in ('type %Tempfile%^|find /i "oem"') do  call :evStart  %%i %%j %%k
改为:
for /f "tokens=1,2,3 delims=," %%i in ('type d:\temp.tmp^|find /i "oem"') do (
setlocal enabledelayedexpansion
        :bakdrvtmploop
        set tmp1=%%i
        set tmp2=%%j
        set tmp3=%%k
        set tmp1=!tmp1: "="! & if !tmp1==%%i goto bakdrvtmploop
        set tmp2=!tmp2: "="! & if !tmp1==%%j goto bakdrvtmploop
        set tmp3=!tmp3: "="! & if !tmp1==%%k goto bakdrvtmploop
        call :evStart !tmp1! !tmp2! !tmp3!
        )

[ 本帖最后由 9zhmke 于 2009-2-6 00:25 编辑 ]
作者: pipipi    时间: 2009-2-21 11:38

还原时出现的,什么意思?
作者: 9zhmke    时间: 2009-4-6 22:46

以前是用你的wmic版来做的,都改得差不多了。现在改用vbs版,第一次试用就发现了问题:
C:\WINDOWS\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\oem3.CAT
复制了 1 个文件
请按任意键继续. . .
        含WHQL数字签名
copy /y "D:\我的文档\系统设置\驱动备份\Drivers\Intel(R) 82801DBM LPC Interface C
ontroller - 24CC \Driver.nfo" "D:\我的文档\系统设置\驱动备份\Drivers\Intel(R) 82
801DBM LPC Interface Controller - 24CC \Driver.bak"
这个文件夹里没有Driver.nfo文件,好象是用vbs生成的吧?对vbs不熟分析不起走了。
会是什么原因呢?该怎么解决呢?
在   copy /y "%~3\Driver.nfo" "%~3\Driver.bak">nul  出现“系统找不到指定的路径。”自动退出

[ 本帖最后由 9zhmke 于 2009-4-6 22:55 编辑 ]
作者: wangjmh    时间: 2009-4-6 23:38

功力不够,看着有点晕,攒下代码,慢慢研究,谢过楼主
作者: fastslz    时间: 2009-4-8 10:38

原帖由 9zhmke 于 2009-4-6 22:46 发表
以前是用你的wmic版来做的,都改得差不多了。现在改用vbs版,第一次试用就发现了问题:
C:\WINDOWS\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\oem3.CAT
复制了 1 个文件
请按任意键继续. . .
   ...


谢谢,知道原因了,设备名称后面多了个空格,代码对空格方面处理的比较严谨了,还是有疏漏。
修改后一楼附件再更新
作者: 9zhmke    时间: 2009-4-11 09:37

今天在调试批过程中发现,wmic没有把设备取出来完,只备份了三个硬件,经查,是wmic读的数据少了,结果只备份了声卡、摄像头、modem三件东西,而显示卡之类的都没找到(总共约十一个左右),以下结果产生自:Wmic Path Win32_PnPSignedDriver where "infname>='oem0.inf' and PDO>'\\Device\\NTPNP'" get infname^,DeviceName^,HardWareID /format:csv > %BakPath%\wmic.txt
很可能是我天天折腾系统弄的,有没人知道具体原因呢?如果找到原因我们可以针对改进。


Node,DeviceName,HardWareID,InfName
ROGER-51C162802,Intel(R) 82801DB/DBM USB Universal Host Controller - 24C2,PCI\VEN_8086&DEV_24C2&SUBSYS_29901509&REV_03,usbport.inf
ROGER-51C162802,USB Root Hub,USB\ROOT_HUB&VID8086&PID24C2&REV0003,usbport.inf
ROGER-51C162802,Intel(R) 82801DB/DBM USB Universal Host Controller - 24C4,PCI\VEN_8086&DEV_24C4&SUBSYS_29901509&REV_03,usbport.inf
ROGER-51C162802,USB Root Hub,USB\ROOT_HUB&VID8086&PID24C4&REV0003,usbport.inf
ROGER-51C162802,Intel(R) 82801DB/DBM USB Universal Host Controller - 24C7,PCI\VEN_8086&DEV_24C7&SUBSYS_29901509&REV_03,usbport.inf
ROGER-51C162802,USB Root Hub,USB\ROOT_HUB&VID8086&PID24C7&REV0003,usbport.inf
ROGER-51C162802,Intel(R) 82801DB/DBM USB 2.0 Enhanced Host Controller - 24CD,PCI\VEN_8086&DEV_24CD&SUBSYS_24C01509&REV_03,usbport.inf
ROGER-51C162802,USB Root Hub,USB\ROOT_HUB20&VID8086&PID24CD&REV0003,usbport.inf
ROGER-51C162802,USB2.0 0.35M WebCam,USB\Vid_0ac8&Pid_0321&Rev_0100,oem10.inf
ROGER-51C162802,USB Mass Storage Device,USB\Vid_0dd8&Pid_1440&Rev_0100,usbstor.inf
ROGER-51C162802,Texas Instruments PCI-4510 CardBus Controller,PCI\VEN_104C&DEV_AC44&SUBSYS_33501509&REV_02,pcmcia.inf
ROGER-51C162802,Realtek AC'97 Audio,PCI\VEN_8086&DEV_24C5&SUBSYS_41401509&REV_03,oem0.inf
ROGER-51C162802,Motorola SM56 Speakerphone Modem,PCI\VEN_8086&DEV_24C6&SUBSYS_29711509&REV_03,oem7.inf

[ 本帖最后由 9zhmke 于 2009-4-11 09:38 编辑 ]
作者: xiaoxin    时间: 2009-4-11 17:08

好羡慕楼主哟  !批处理那么厉害
作者: fastslz    时间: 2009-4-12 10:36

  1. Wmic Path Win32_PnPSignedDriver where "infname like 'oem%%'" get infname^,DeviceName^,HardWareID /format:csv
复制代码

作者: hjh700913    时间: 2009-5-8 10:49

hao hao hao
作者: hjh700913    时间: 2009-5-8 10:51

先把代码下下来研究一下,谢谢了!
作者: pepenm    时间: 2009-5-30 13:16

超赞!
向楼主学习.
作者: a690984119    时间: 2009-6-21 10:52

ssssssssssssssssssssssssssssss
作者: zljzsmzzx    时间: 2009-6-27 02:18

好好研究研究!!!!
作者: qq8705    时间: 2009-7-24 08:15

嘻嘻、、、
作者: yangwenzheng    时间: 2009-8-11 11:59

在瑞星下,有病毒提示
作者: wkdxz    时间: 2009-8-14 14:21

很好,很强大的纯脚本。收藏了,谢谢LZ
作者: wyjdeok    时间: 2009-8-16 01:44

下来测试一下....
作者: minoboy    时间: 2009-8-17 13:57

楼主能公布源代码么???
作者: yangwenzheng    时间: 2009-8-26 15:23     标题: 回复 1楼 的帖子

版主你好,怎么才能把集成驱动包里面的例如:欢迎使用批处理之家一类的话,变成自己的???
作者: devilwjx    时间: 2009-9-20 14:10

一个字     强啊!!!!!
作者: athinko    时间: 2009-10-6 10:12

西西,从装系统后就是有这种麻烦,虽然我米有用过,不知道怎么样,但还是支持那
作者: athinko    时间: 2009-10-13 15:45

这个我已经实践过了
不过还原的时候
有个地方
缺少个什么什么的文件
要手动找
。。。???
不知道是我电脑的缘故还是怎么会是。。。?
作者: ywcao    时间: 2009-10-20 18:10

jing测序测试,还是不能备份取得驱动程序
作者: stuqx    时间: 2009-11-5 13:57

楼主只说了XP、VISTA、2000   没有说支持2003不
2003下可以用么?
作者: fastslz    时间: 2009-11-5 17:39

To 79楼  athinko
NV显卡会提示缺少NvCplSetupInt.exe文件,这个暂时没法解决,我试过多款驱动备份程序,如果安装驱动时删除了原文件夹,都无法成功备份。


To 81楼  stuqx
2003能支持的
作者: zfann521    时间: 2009-12-3 23:54

我顶zzzzzzzzzzzzzzzzzz
作者: neverlands517    时间: 2009-12-16 13:42

很不错支持~~~~~~~
感谢楼主的奉献~~~
支持~~~~
学习了
作者: cao    时间: 2009-12-21 18:42

不知道这个脚本适不适合windows 7 的系统啊?
有点害怕用啊,要是赔了夫人又折兵就坏菜了。。。。。
作者: liukevin    时间: 2010-7-30 20:29

羡慕呀,在次感谢大大的分享。
作者: franke007    时间: 2010-8-24 22:25

在我的上网本上 windowsxp sp3 测试通过,挺好用
作者: sarino    时间: 2010-11-9 10:18

真不错啊 ,喜欢呢
作者: wxf3753    时间: 2010-11-24 18:54

收藏了,谢谢楼主!!!
作者: okball    时间: 2011-2-10 14:07

多谢,我来学习一下~~~~~~~~
作者: lxzzr    时间: 2011-3-10 17:27

有点小的问题:
1,卡巴将sleep.exe报毒
2,备份的时候将卡巴的网卡也备份进去了(表达能力欠缺^_^)
作者: gzdaren    时间: 2011-5-10 08:46

看看是什么东西
作者: fastslz    时间: 2011-5-24 13:34

时隔二年未更新我也够懒的
新版本即将重新发布,支持winxp以上系统包括32位64位,并优化NVIDIA显卡驱动
正在测试中.....
作者: techon    时间: 2011-5-24 14:42

测试了下旧版的 驱动备份不全,
期待新版本。。。。。继续测试
作者: techon    时间: 2011-5-27 14:32

本帖最后由 techon 于 2011-5-27 14:37 编辑

此行代码,如文件 InfName.inf 里含有多行及引号
  1. for /f "tokens=1* delims== " %%k in ('type "%Systemroot%\Inf\%InfName%.inf"^|find /i ".Cat"') do set "OemName=%%~nl"
复制代码
例如我的一个inf文件:
type "%Systemroot%\Inf\oem24.inf"|find /i ".Cat"
  1. CatalogFile.NT = cb002iku.cat
  2. HKLM, Software\%CompanySubkey%\%ProductSubkey%\Files\CATALOG,      CB00*.cat,,     "CB00*.cat"
  3. HKLM, Software\%CompanySubkey%\%ProductSubkey%\Files\CATALOG,      CB00*.cat,,     "CB00*.cat"
复制代码
将导致后面的
  1. if not defined catfile for /f "delims=*" %%k in ('dir /s/b/a-d "%SystemRoot%\%OemName%.cat" 2^>nul') do set "catfile=%%~k"
复制代码
语句出错直接退出

附件不好使
。。。。
作者: fastslz    时间: 2011-5-28 09:24

谢谢反馈,更谢谢你直接找出了原因
  1. for /f "tokens=1* delims== " %%k in ('type "%Systemroot%\Inf\%InfName%.inf"^|findstr /i "CatalogFile .Cat"') do set "OemName=%%~nl"
复制代码
这样就可以解决问题了
本来这段代码可以优化不用find或findstr,直接tokens=1,2可以做到了,这样代码执行效率稍微高一点,稳定性可差远了,这个也多亏你贴出inf文件信息,CatalogFile.NT = cb002iku.cat很少见,所以代码只有在不同的环境下才能更完善!
附件已更新
作者: techon    时间: 2011-5-29 00:51

本帖最后由 techon 于 2011-5-29 01:16 编辑

很感谢 fastslz 费心制作批处理程序,使驱动备份、还原变得如此简单轻松

楼上的代码还是会出问题。。。
因为这个inf文件后面有两行:
HKLM, Software\%CompanySubkey%\%ProductSubkey%\Files\CATALOG,      CB00*.cat,,     "CB00*.cat"
HKLM, Software\%CompanySubkey%\%ProductSubkey%\Files\CATALOG,      CB00*.cat,,     "CB00*.cat"

导致中途退出的是以上这两行
这个for /f 执行最后
%%L==Software\%CompanySubkey%\%ProductSubkey%\Files\CATALOG,      CB00*.cat,,     "CB00*.cat"
%%~nL==OemName==CATALOG,      CB00*.cat,,     "CB00*
保险的解决办法是:
  1. for /f "tokens=1,2 delims==此处为一个TAB制表符 " %%k in ('type "%Systemroot%\Inf\%InfName%.inf"^|findstr /i Catalogfile') do set "OemName=%%~nl"
复制代码
  1. for /f "tokens=1,2 delims==此处为一个TAB制表符 " %%k in ('type "%Systemroot%\Inf\%InfName%.inf"^|find /i "Catalogfile"') do set "OemName=%%~nl"
复制代码
inf 文件的格式比较宽松,很多东西想怎么写就怎么写
还有这样的呢。。。 不过目前还没发现第三方驱动使用这样的inf信息
CatalogFile.NTx86  = ndisrd86.cat
CatalogFile.NTAMD64 = ndisrd64.cat


也就微软这么用。。。。暂时可以忽略,或者考虑加个判断是x86还是 *64
  1. ; -- NDISRD_M.INF --
  2. ;
  3. ; Based on Passsthru Miniport INF file
  4. ;
  5. ; Copyright (c) 2000-2009, NT Kernel Resources
  6. ; ----------------------------------------------------------------------
  7. [Version]
  8. signature  = "$Windows NT$"
  9. Class      = Net
  10. ClassGUID  = {4d36e972-e325-11ce-bfc1-08002be10318}
  11. Provider   = %Ntkr%
  12. DriverVer  = 08/27/2009,3.00.7.1
  13. CatalogFile.NTx86  = ndisrd86.cat
  14. CatalogFile.NTAMD64 = ndisrd64.cat
  15. [ControlFlags]
  16. ExcludeFromSelect = nt_ndisrdmp
  17. [DestinationDirs]
  18. DefaultDestDir=12
  19. ; No files to copy
  20. [Manufacturer]
  21. %Ntkr% = NTKR,NTx86,NTia64,NTamd64
  22. ;For Win2K
  23. [NTKR]
  24. %NdisrdMP_Desc% = NdisrdMP.ndi, nt_ndisrdmp
  25. ;For WinXP and later
  26. [NTKR.NTx86]
  27. %NdisrdMP_Desc% = NdisrdMP.ndi, nt_ndisrdmp
  28. [NTKR.NTia64]
  29. %NdisrdMP_Desc% = NdisrdMP.ndi, nt_ndisrdmp
  30. [NTKR.NTamd64]
  31. %NdisrdMP_Desc% = NdisrdMP.ndi, nt_ndisrdmp
  32. [NdisrdMP.ndi]
  33. AddReg  = NdisrdMP.ndi.AddReg
  34. Characteristics = 0x29 ;NCF_NOT_USER_REMOVABLE | NCF_VIRTUAL | NCF_HIDDEN
  35. [NdisrdMP.ndi.AddReg]
  36. HKR, Ndi, Service,  0,  NdisrdMP
  37. [NdisrdMP.ndi.Services]
  38. AddService = NdisrdMP,0x2, NdisrdMP.AddService
  39. [NdisrdMP.AddService]
  40. ServiceType    = 1 ;SERVICE_KERNEL_DRIVER
  41. StartType      = 3 ;SERVICE_DEMAND_START
  42. ErrorControl   = 1 ;SERVICE_ERROR_NORMAL
  43. ServiceBinary  = %12%\ndisrd.sys
  44. AddReg         = NdisrdMP.AddService.AddReg
  45. [NdisrdMP.AddService.AddReg]
  46. ; ----------------------------------------------------------------------
  47. ; Add any miniport-specific parameters here.  These are params that your
  48. ; filter device is going to use.
  49. ;
  50. ;HKR, Parameters, ParameterName,  0x10000, "MultiSz", "Parameter", "Value"
  51. ;HKR, Parameters, ParameterName2, 0x10001, 4
  52. [Strings]
  53. Ntkr = "NTKR"
  54. ndisrdMP_Desc = "WinpkFilter Miniport"
  55. [SourceDisksNames]
  56. ;None
  57. [SourceDisksFiles]
  58. ;None
复制代码

作者: fastslz    时间: 2011-5-30 14:07

2011-5-30 更新说明:优化备份驱动签名部分代码,同步系统版本
谢谢techon
作者: okball    时间: 2011-6-1 09:00

多谢了,下载好好学习一下
作者: Demon    时间: 2011-6-1 15:34

一堆EXE也叫“纯”批处理?这样的话“纯”批处理什么不能做?




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2