查看: 1630|回复: 0
收起左侧

[求助] 纯脚本备份&还原驱动增强版

[复制链接]
xp163
发表于 2011-8-21 17:39:39 | 显示全部楼层 |阅读模式
本帖最后由 xp163 于 2011-8-21 17:41 编辑

原创]纯脚本备份&还原驱动增强版(2009-4-8已支持精简XP)



说明:

  不能说此脚本比驱动精灵更完美,但它确实弥补了驱动精灵的不足!

  这个版本是我先前版本上(借助DevCon纯脚本备份驱动)增强的,已经是完美版本了。

1、支持备份完整的WHQL数字签名(我手头的驱动精灵 2005专业版就不支持)。

2、智能判断系统中已安装的驱动程序,且只备份用户自行安装的驱动,若该设备包含WHQL数字签名则打印信息。

3、支持驱动文件打包存放,双击单个以设备名命名的.EXE自解压方式还原驱动,还原驱动就如此轻松。

4、支持宁静默方式外{过}{滤}挂安装更新驱动,方便系统集成、Ghost用户调用。

5、兼容驱动精灵已备份的项目,也就是说运行一下脚本就还原驱动精灵曾经备份的项目。

  还原方法将DevUpdate.Cmd Tools 放在精灵已备份驱动文件目录里,运行DevUpdate.Cmd

6、源代码公开化没作任何加密,只要你也略懂脚本完全自行修改达到自己的所需!不要改头换面就好;-)

  

  

补充说明:

EXE自解压还原驱动自动应答参数 -y 如:"D:\Dev\NVIDIA GeForce4 MX MX 400.exe" -y

打包集成的NVIDIA GeForce4 MX MX 400.exe只限在本机上还原更新,我不保证其能在所有的NVIDIA GeForce4系列显卡上正常使用,因为每一机子的硬件ID并不完全相同。

此版不在支持Win2000,Win2000用户可以考虑使用先前的版本来备份,Vista下本人没有测试条件,所以...

好了我也不贴N多图文说明了,一句话备份还原驱动简单再简单,菜鸟、高手都适用^_^

子程序说明

Devcon.exe 微软代替设备管理器命令行实用工具

Devcon_64.exe 微软代替设备管理器命令行实用工具64 Bit

Sleep.exe 用于批处理暂停或等待用户按一个键

Update.cmd 更新设备驱动代码

Dev.sfx  用于制作集成驱动的自解压模块

7za.exe  本人汉化的7-zip命令行独立版压缩工具(7za.exe不依赖dll)




@echo off

Title 欢迎使用批处理之家(备份驱动脚本) BY: fastslz

Set Tools=%~dps0Tools

if not %OS%==Windows_NT (color 0c&%Tools%\sleep.exe -k -p "此程序必须在Windows NT或XP以上操作系统上运行" 10&exit)

%Tools%\devcon.exe>nul 2>nul

if %errorlevel%==9009 (color 0c&%Tools%\sleep.exe -k -p "本脚本需要微软 %Tools%\devcon.exe 命令行实用工具支持" 10&exit)

set Tempfile="%Temp:"=%.\fast.slz"

set "BakPath=%~dp0Drivers"

del %Tempfile% 2>nul

cls&color 0b&set count=0

echo 正在收集设备信息,请稍等...

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

dir /ad "%BakPath%" >nul 2>nul||MD "%BakPath%"

for /f "tokens=1,2,3 delims=," %%i in ('type %Tempfile%^|find /i "oem"') do call :DevStart %%i %%j %%k

del %Tempfile% 2>nul

echo.

%Tools%\sleep.exe -p "备份已完成!一共备份了 %count% 项设备驱动" 3

echo.&color 0a

%Tools%\sleep.exe -k -p "按下任意键开始打包集成驱动,15秒内未做选择默认自动退出" 15

if %errorlevel%==0 exit/b0

for /f "delims=*" %%a in ('dir /s/a-d/b Driver.nfo 2^>nul') do call :Pack "%%a"

cls&echo.&color 0b

%Tools%\sleep.exe -k -p "打包已完成!10 秒后自动退出" 10

exit

:DevStart

if "%~1"=="" goto:eof

color 0e

if %count% equ 0 cls

setlocal enabledelayedexpansion

Set "DeviceName=%~1"

Set "DevName=!DeviceName:/= !"

Set "DevName=!DevName:\= !"

Set "DevName=!DevName:?= !"

Set "DevName=!DevName:|= !"

Set "DevName=!DevName:>= !"

Set "DevName=!DevName:<= !"

Set "DevName=!DevName:^*= !"

set "HardWareID=%~2"

set "HardWareID=!HardWareID:&amp;=&!"

dir /ad "%BakPath%\%DevName%" >nul 2>nul||MD "%BakPath%\%DevName%"

>"%BakPath%\%DevName%\Driver.nfo" set /p=DeviceName=%DeviceName%<nul

>>"%BakPath%\%DevName%\Driver.nfo" echo.

>>"%BakPath%\%DevName%\Driver.nfo" set /p="HardWareID=%HardWareID%"<nul

>>"%BakPath%\%DevName%\Driver.nfo" echo.

>>"%BakPath%\%DevName%\Driver.nfo" set /p="InfName=%~3"<nul

set/p=正在备份--^> "%~1"<nul

For /F "skip=1 tokens=*" %%i in ('%Tools%\devcon.exe Driverfiles "%HardWareID%"^|find ":\"') do xcopy /h/r/y %%~si "%BakPath%\%DevName%" >nul 2>nul

xcopy /h/r/y "%Systemroot%\Inf\%~3" "%BakPath%\%DevName%" >nul 2>nul

if errorlevel 0 set /a "count=%count%+1"

set "InfName=%~n3"

for /f "tokens=1* delims== " %%k in ('type "%Systemroot%\Inf\%InfName%.inf"^|find /i ".Cat"^|find /v "64"') do set "OemName=%%~nl"

if defined OemName (

   for /f "delims=*" %%a in ('dir /s/b/a-d "%SystemRoot%\system32\CatRoot\%InfName%.cat" 2^>nul') do set "catfile=%%~a"

   if not defined catfile for /f "delims=*" %%k in ('dir /s/b/a-d "%SystemRoot%\%OemName%.cat" 2^>nul') do set "catfile=%%~k"

)

if defined catfile (

   set "InfName=%OemName%"

   xcopy /h/r/y "%catfile%" "%BakPath%\%DevName%\">nul 2>nul

   if errorlevel 0 echo  含WHQL数字签名

   attrib -s -h -r "%BakPath%\%DevName%\%InfName%.*">nul

   copy /y "%BakPath%\%DevName%\Driver.nfo" "%BakPath%\%DevName%\Driver.bak">nul 2>nul

   type "%BakPath%\%DevName%\Driver.bak"|find /v "InfName=">"%BakPath%\%DevName%\Driver.nfo"

   >>"%BakPath%\%DevName%\Driver.nfo" echo InfName=%OemName%.inf&del "%BakPath%\%DevName%\Driver.bak" 2>nul

   move /y "%BakPath%\%DevName%\%InfName%.inf" "%BakPath%\%DevName%\%OemName%.inf">nul 2>nul

   move /y "%BakPath%\%DevName%\%InfName%.cat" "%BakPath%\%DevName%\%OemName%.cat">nul 2>nul

)

endlocal&set count=%count%

goto:eof

:Pack

if "%~1"=="" goto:eof

set "DriverPath=%~dp1"

set "Name=%DriverPath:~0,-1%"

for /f "delims=*" %%a in ("%Name%.tmp") do set "Name=%%~na"

cls&echo 正在集成 %Name% 驱动包请稍等...

%Tools%\7za.exe a -sfxdev.sfx "%Name%.exe" "%DriverPath%*.*" "%Tools%\devcon.exe" "%Tools%\sleep.exe" "%Tools%\Update.cmd"

rem rd /s/q "%DriverPath%"

goto:eof
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-1-17 06:18 , Processed in 0.127509 second(s), 16 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

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