[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
好东西啊
谢谢楼主分享了
我骄傲,我是个懒人。

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

XP SP3 完整版
备份是可以了,但是还有点问题!
系统装有卡巴,卡巴装有一个驱动,备份连卡巴的驱动也备份了。
除了网卡能自动恢复外,其它的驱动一律报什么ID错。

TOP

楼主的程序真的没有对精简版XP有改善的余地?

TOP

还以为真的是纯脚本,晕

TOP

我对 vbs 一窍不通,研究什么?
用 REG 命令配合 FOR 及 FIND 等试试吧

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

思路:(如果要我列出代码要需要一段时间的)

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 编辑 ]

TOP

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

TOP

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

先讲这么多先,下次再讲。

TOP

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

TOP

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


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

TOP

13 楼在精简系统下的测试结果:

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

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

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



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


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

[ 本帖最后由 chishingchan 于 2008-3-21 10:57 编辑 ]

TOP

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

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

返回列表