由于工作需要,有时要在测试系统的时候自动把特定的驱动打上去,所以需要在测试脚本中加入自动判断硬件名称,然后自动打驱动的功能。先上源码一【源码一驱动安装代码来源:https://blog.csdn.net/greless/article/details/60959193,CPU和主板判断部分自己原创编写。】,遍历安装指定目录下的驱动文件:
del /s/q .\1nul
del /s/q .\data.txt
::mode con cols=90
sc config winmgmt start= auto >nul 2<&1
net start winmgmt 2>1nul
setlocal ENABLEDELAYEDEXPANSION
echo 主版:
wmic BASEBOARD get Manufacturer^,Product^,Version^,SerialNumber /value') do (
set /a tee+=1
if "!tee!" == "4" echo 型 号 = %%b .\>>data.txt
)
set tee=0
echo.
echo CPU:
for /f "tokens=1,* delims==" %%a in ('wmic cpu get name^,ExtClock^,CpuStatus^,Description /value') do (
set /a tee+=1
if "!tee!" == "6" echo 名称及主频率 = %%b .\>>data.txt
)
del /s/q .\1nul
@find /I /C "(MS-" .\data.txt > nul
@if %ERRORLEVEL% == 0 (
goto CPUPD
) else (
goto END
)
:CPUPD
@find /I /C "-10" .\data.txt > nul
@if %ERRORLEVEL% == 0 (
goto daqudong
) else (
goto END
)
:daqudong
if "%PROCESSOR_ARCHITECTURE%" == "x86" (
set OS_PLATFORM=x86
) else (
set OS_PLATFORM=x64
)
::Run script as Admin
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if %ERRORLEVEL% EQU 0 (
if exist "%temp%\getadmin.vbs" del /q "%temp%\getadmin.vbs"
) else (
goto :Fun_UAC_Prompt
if exist "%temp%\getadmin.vbs" del /q "%temp%\getadmin.vbs"
)
:START
@echo.
@echo Start install drivers...
cd /d %~dp0%OS_PLATFORM%
setlocal enabledelayedexpansion
for /f "delims=" %%b in ('dir /s /b ".\*.inf"') do (
set INF_NAME=%%~nb
set INF_PATH=%%~dpb
echo cd /d !INF_PATH!
cd /d !INF_PATH!
echo pnputil -i -a !INF_NAME!.inf
pnputil -i -a !INF_NAME!.inf
timeout /t 0
)
xcopy /y %~dp0%OS_PLATFORM%\43430r0nvram.txt %WINDIR%\System32\Drivers\
goto :END
:ERROR
color 4f
@echo.
@echo ERROR
@echo.
pause>nul
goto :ERROR
:Fun_UAC_Prompt
if NOT "%~1"=="" set file= ""%~1""
(echo Set UAC = CreateObject("Shell.Application"^)
@echo UAC.ShellExecute "cmd.exe", "/c %~s0%file%", "", "runas", 1)> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /b 0
:END
@echo.
@echo Successfully installed drivers
@echo.
timeout -t 0
exit
上面代码的作用是通过获取当前系统的主板和CPU名称,然后看下主板是否是微星主板,如果是就继续判断CPU,不是就跳转到结束点。也就是同时满足2个条件就自动打驱动,微星主板搭配10代CPU。驱动路径可以在:START处指定,默认为批处理目录下。修改驱动目录参考案例:
:START
@echo.
@echo Start install drivers...
cd c:\intel\drivers\
cd /d %~dp0%OS_PLATFORM%
这种安装方法会将所有的驱动都安装到驱动池,并立即匹配缺少驱动的硬件。
源码二:
@echo off
%~d0
cd %~dp0
%windir%/system32/pnputil /add-driver C:\Intel\10\drives\*.inf /install
exit
这种方法是调用系统自带的工具安装驱动,安装过程是先匹配硬件,然后再安装,所以即使有多余的驱动也不会导入到驱动池中。
源码三:
@echo off
netsh interface set interface name="Ethernet" admin=DISABLED
REG ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" /f /v "ExecutionPolicy" /d "RemoteSigned" /t REG_SZ
powershell -executionpolicy bypass -File .\deloeminf.ps1
REG DELETE "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell" /v "ExecutionPolicy" /f
"%~dp0devcon.exe" remove "PCI\VEN_8086&DEV_15F2"
"%~dp0devcon.exe" remove "PCI\VEN_8086&DEV_15F3"
devcon.exe rescan
"%~dp0devcon.exe" update "%~dp0\driver\e2f68.inf" "PCI\VEN_8086&DEV_15F2"
"%~dp0devcon.exe" update "%~dp0\driver\e2f68.inf" "PCI\VEN_8086&DEV_15F3"
TIMEOUT /t 30
EXIT /b
利用devcon.exe工具安装指定驱动,安装之前先卸载对应硬件驱动,然后再安装。这种主要是用于原本已经有驱动,给硬件驱动升级。源码链接:https://download.csdn.net/download/yakeyun/19056698?spm=1001.2014.3001.5501
3个源码合集链接:https://download.csdn.net/download/yakeyun/19056913?spm=1001.2014.3001.5501
源码四-驱动导出:
@echo off
echo 驱动导出中,请稍等......
cd %~dp0
::导出全部驱动
start /w pnputil.exe /export-driver * .\drivers\
timeout /t 3
exit
上面用通配符,表示导出当前系统到当前目录下的"drivers"文件夹下面,如果要导出单个硬件的驱动,可以用下面代码
::导出指定驱动
start /w pnputil.exe /export-driver "OEM3.INF" .\drivers\
查看当前硬件名称的方法:设备管理器界面,右击硬件,选择“属性”--“详细信息”--然后选择inf名称即可知道当前硬件在系统里面的特定名称,一般都是OEM加数字组合。实际导出的是其它名称,OEM个人理解为系统为硬件备注的一个标签或者备注。