个人笔记-批处理之系统驱动自动安装导出操作篇

由于工作需要,有时要在测试系统的时候自动把特定的驱动打上去,所以需要在测试脚本中加入自动判断硬件名称,然后自动打驱动的功能。先上源码一【源码一驱动安装代码来源: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个人理解为系统为硬件备注的一个标签或者备注。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值