[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
除了devcon其它都是浮云,而devcon也是微软WDK开发工具之一,之前也就“借助DevCon纯脚本备份驱动”,如果不依赖任何exe备份效率没这么高,即使能备份不能还原那这个批处理也只是浮云!find 外部命令从MS-DOS存在到 ...
fastslz 发表于 2011-6-3 10:54

那就不要加个“纯”字,我也很想知道批处理能做什么。

TOP

一堆EXE也叫“纯”批处理?这样的话“纯”批处理什么不能做?
Demon 发表于 2011-6-1 15:34

除了devcon其它都是浮云,而devcon也是微软WDK开发工具之一,之前也就“借助DevCon纯脚本备份驱动”,如果不依赖任何exe备份效率没这么高,即使能备份不能还原那这个批处理也只是浮云!find 外部命令从MS-DOS存在到现在和之后的Windows 8,目前还在计算机考级范围内。
批处理能做什么,无非简化操作!

TOP

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

TOP

多谢了,下载好好学习一下

TOP

2011-5-30 更新说明:优化备份驱动签名部分代码,同步系统版本
谢谢techon

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

谢谢反馈,更谢谢你直接找出了原因
  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很少见,所以代码只有在不同的环境下才能更完善!
附件已更新

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

测试了下旧版的 驱动备份不全,
期待新版本。。。。。继续测试
解释执行的脚本语言与编译语言还是有很大差别的。。。

TOP

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

TOP

看看是什么东西

TOP

有点小的问题:
1,卡巴将sleep.exe报毒
2,备份的时候将卡巴的网卡也备份进去了(表达能力欠缺^_^)

TOP

多谢,我来学习一下~~~~~~~~

TOP

收藏了,谢谢楼主!!!

TOP

真不错啊 ,喜欢呢

TOP

返回列表