[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
测试了下旧版的 驱动备份不全,
期待新版本。。。。。继续测试
解释执行的脚本语言与编译语言还是有很大差别的。。。

TOP

本帖最后由 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"
复制代码
语句出错直接退出

附件不好使
。。。。
解释执行的脚本语言与编译语言还是有很大差别的。。。

TOP

本帖最后由 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
复制代码
解释执行的脚本语言与编译语言还是有很大差别的。。。

TOP

发现另外一个问题:
测试系统:XP SP3,windows7 x64
硬件平台:intel x86/x64
问题:Intel(R) Management Engine Interface 驱动无提示并且不备份

原因:Intel(R) Management Engine Interface 驱动,使用WMI(也就是Dev.vbs )查不到 oem*.inf



做如下修改:
1. Dev.vbs 文件:
第 29 行:
  1. If Instr(aItem.InfName,Chr(111)&Chr(101)&Chr(109)) > 0 Then
复制代码
改为:
  1. If Instr(aItem.InfName,Chr(111)&Chr(101)&Chr(109)) > 0 or Instr(aItem.DeviceName,"Management Engine Interface") > 0 Then
复制代码
2. DevBackup.cmd 文件:
第 55 行:  对应为新文件 57 行
  1. xcopy /h/r/y "%Systemroot%\Inf\%~4" "%~3" >nul 2>nul
复制代码
改为:
  1. xcopy /h/r/y "%Systemroot%\Inf\%oemN%" "%~3" >nul 2>nul
复制代码
第 57 行:
  1. set "InfName=%~n4"
复制代码
改为:  对应为新文件 59 行
  1. set "InfName=%oemN:~0,-4%"
复制代码
在 48 行后加入两行:    对应为新文件 49、50 行
  1. set "oemN=%~4"
  2. if "%~4"=="" if not "%~2"=="" for /f "tokens=4 delims=.\" %%C in ('%DevCon% Driverfiles "%~2"^|findstr "oem.*inf\>"') do set "oemN=%%C.inf"
复制代码
XP SP3下 测试正常

附件: 您需要登录才可以下载或查看附件。没有帐号?注册
解释执行的脚本语言与编译语言还是有很大差别的。。。

TOP

回复 130# a87750530
杀毒软件对自身文件会有保护,请停用杀毒软件后再试
解释执行的脚本语言与编译语言还是有很大差别的。。。

TOP

回复 145# xiangqian91


关于MEI驱动的备份问题,请看132楼
解释执行的脚本语言与编译语言还是有很大差别的。。。

TOP

网盘分享的附件不见了,谁能给补一个?
解释执行的脚本语言与编译语言还是有很大差别的。。。

TOP

返回列表