因会员要求利用纯脚本来安全删除U盘那贴,无意间发现DevCon命令就突发奇想,利用这个命令写个脚本来备份设备驱动。此脚本可以备份全部的设备驱动包括设备管理器中隐藏的设备,就备份项目上超过了大家熟悉的驱动精灵。
更新说明:
不能说此脚本比驱动精灵更完美,但它确实弥补了驱动精灵的不足!
1、支持备份完整的WHQL数字签名(我手头的驱动精灵 2005专业版就不支持),其它更新版本未知,因为我不想为更高版本激活Key犯愁了:-)
2、兼容驱动精灵已备份的项目,也就是说运行一下脚本就还原所有驱动精灵曾经备份的项目,且路径是任意的,只要在硬盘上或U盘上统统搜出来并更新。
3、支持鼠标点击对话框任选单个设备还原驱动方式。
4、支持宁静默方式外挂安装更新驱动,方便系统集成、Ghost用户调用。
5、修正可能存在的复制错误,更新备份时屏幕显示方式,打印出包含WHQL数字签名的设备名
6、2008-01-17更新重复备份同一设备的问题,更新代码稳定性
更新说明:
不能说此脚本比驱动精灵更完美,但它确实弥补了驱动精灵的不足!
1、支持备份完整的WHQL数字签名(我手头的驱动精灵 2005专业版就不支持),其它更新版本未知,因为我不想为更高版本激活Key犯愁了:-)
2、兼容驱动精灵已备份的项目,也就是说运行一下脚本就还原所有驱动精灵曾经备份的项目,且路径是任意的,只要在硬盘上或U盘上统统搜出来并更新。
3、支持鼠标点击对话框任选单个设备还原驱动方式。
4、支持宁静默方式外挂安装更新驱动,方便系统集成、Ghost用户调用。
5、修正可能存在的复制错误,更新备份时屏幕显示方式,打印出包含WHQL数字签名的设备名
6、2008-01-17更新重复备份同一设备的问题,更新代码稳定性
@echo off
title 备份基本设备驱动
::::::相关讨论: http://www.cn-dos.net
::::::网上论坛: http://groups.google.com/group/fastslz
::::::个性空间: http://space.cech.com.cn/fastslz
if not %OS%==Windows_NT (cls&echo.&color 4E&echo 此程序必须在Windows NT或2000以上操作系统上运行&ping/n 5 127.1>nul&exit)
devcon.exe>nul 2>nul
if %errorlevel%==9009 (cls&echo.&color 0E&echo 本脚本需要微软 DevCon.exe 命令行实用工具支持&ping/n 5 127.1>nul&exit)
set log="Drivers\%~n0.log"
set Tempfile="%Temp:"=%.\fast.slz"
set count=0&set error=0&set whql=0
if not exist Drivers\nul MD Drivers
del "Drivers\*.log" 2>nul
cls&color 0b
echo.
echo 正在收集设备信息,请稍等...
for %%a in (PCI PCIIDE USB IDE DISPLAY USBPRINT) do (
for /f "tokens=1* delims=: " %%b in ('devcon find *%%a*^|find "\"') do echo "%%b"****"%%c">>"%Temp:"=%.\Devinfo.slz"
)
for /f "tokens=1* delims=****" %%b in ('type "%Temp:"=%.\Devinfo.slz"^|find /v ": "') do call :startcopy "@%%~b" "%%~c"
echo.
echo 已经备份了 %count% 项设备驱动
>>%log% echo.
echo 一共备份了 %count% 项设备驱动>>%log%
if %error% gtr 0 (
echo.
if %error% equ 1 (
echo 在复制过程中遇到错误
) else (
echo 在复制过程中遇到 %error% 个错误
)
echo 请检查日志文件 %log%
)
endlocal
echo.
echo 按任意键退出. . .&pause>nul
:startcopy
color 0e
if "%~2"=="%forestall%" goto:eof
set "forestall=%~2"
setlocal enabledelayedexpansion
if "%~2"=="" goto:eof
del %Tempfile% 2>nul
set ID=%1
devcon driverfiles %1>%Tempfile% 2>nul
find ":\" %Tempfile%>nul
if errorlevel 1 goto:eof
if %count% equ 0 cls
set name="%~2"
>>%log% echo "%~2"
set ename=%name:&=_%
<nul set/p=正在备份--^> %ename:~0,54%
for %%k in (/ ; ,) do set name=!name:%%k=_!
rem set name=%name:(=
%
set name=%name:&=_and_%
set name=%name:"=%
for /f "tokens=1 delims=\" %%i in ('type %Tempfile%^|find "\"^|find /v ":"') do set class=%%i
for /f "tokens=1 delims=
上面的备份方法已经够用了,若备份全部的驱动,把
for %%a in (PCI PCIIDE USB IDE DISPLAY) do (
for /f "tokens=1* delims=: " %%b in ('devcon find %%a\*^|find "\"') do call :startcopy "@%%b" "%%c"
)
替换成
for /f "tokens=1* delims=: " %%b in ('devcon findall *^|find "\"') do call :startcopy "@%%b" "%%c"
相关资料:微软DevCon 命令行实用工具可替代设备管理器
还原更新驱动精灵已备份的项目.CMD代码见15楼
[ Last edited by fastslz on 2008-3-19 at 09:51 AM ]
