找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: fastslz

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

[复制链接]
发表于 2008-3-21 10:47:20 | 显示全部楼层
原帖由 fastslz 于 2008-3-20 13:56 发表
+ ■ 硬件支持   (简直榨干了) 能用才怪
nLite 以修改inf文件达到目的的,不知道它去掉了哪部分....


现在装机的不是精简版就是GHOST版,GHOST版也是精简版,精简系统是大势所趋的!
此程序的兼容性无论在方式或方法上要追求比驱动精灵的兼容性更好,兼容性更好的更可以在纯DOS下备份Windows的驱动!
 楼主| 发表于 2008-3-21 11:09:16 | 显示全部楼层
1:GHOST版、精简版适合哪些人呢?
2:制作精简版GHOST版的人自己是否在用精简版的?
菜鸟喜欢GHOST版、精简版这是无疑的,高手喜欢折腾的就不会用这些系统。
所以我特别喜欢龙卷风系列作品,即使精简也要又个尺度。
纯DOS下备份Windows的驱动!几乎不可能,谁做谁找罪受。WinPE下可以考虑热备份Windows下驱动,但是很难做出还原脚本。
发表于 2008-3-21 11:37:58 | 显示全部楼层
还原脚本用你的方式就可以了,其实纯DOS下有很多辅助软件,只是没有一一去尝试去学习。
就算真的可以在DOS下备份,我也不赞成在DOS下去做。只不过是想说明一下兼容性而已。
在DOS联盟的脚本修改一下不就成了吗?放弃VBS吗,否则也会带来兼容性问题(相对于精简版)。则用最简单的语句,不用某些东西支持的语句就好。

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

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

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 编辑 ]
 楼主| 发表于 2008-3-21 19:20:28 | 显示全部楼层
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,所有都成功结果硬件还是没有安装成功。上面的是我的测试代码的其中一段,你自己玩玩吧
发表于 2008-3-21 23:11:39 | 显示全部楼层
我对 vbs 一窍不通,研究什么?
用 REG 命令配合 FOR 及 FIND 等试试吧
发表于 2008-3-28 19:12:00 | 显示全部楼层
还以为真的是纯脚本,晕
发表于 2008-4-19 23:22:07 | 显示全部楼层
楼主的程序真的没有对精简版XP有改善的余地?
发表于 2008-4-30 11:04:08 | 显示全部楼层
XP SP3 完整版
备份是可以了,但是还有点问题!
系统装有卡巴,卡巴装有一个驱动,备份连卡巴的驱动也备份了。
除了网卡能自动恢复外,其它的驱动一律报什么ID错。
 楼主| 发表于 2008-5-3 12:12:05 | 显示全部楼层

回复 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
复制代码
发表于 2008-5-21 09:23:41 | 显示全部楼层
好东西啊
谢谢楼主分享了
发表于 2008-6-8 21:11:22 | 显示全部楼层
为什么收集设备信息n久?
发表于 2008-6-21 15:30:34 | 显示全部楼层
好强~~~~学习中!
发表于 2008-6-27 12:21:03 | 显示全部楼层
楼主呀,我找你好久了,从批处理联盟论坛就关注你了,后来要DOS联盟论坛找到你,我说怎么不更新了,我还用,1月份你那个,批处,这次又要这看到你了,你可能跑,哈哈,这次看来更新了不少呀,用用看,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 21:41 , Processed in 0.015562 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表