如何使用通配符自动化 .inf PnP Windows 7 驱动程序?

如何使用通配符自动化 .inf PnP Windows 7 驱动程序?

我正在尝试使用以下任一批处理文件通过 For 循环和 .inf 文件的通配符来自动执行 Windows 7 的 PnP 驱动程序安装。

批处理rundll32读取并回显正确的 .inf 文件,但随后给出“错误安装失败”的提示,并且pnputil 批处理运行时没有任何错误,但并未安装。

我该如何修正批处理文件以正确安装 inf?

@echo off&color a&setlocal enabledelayedexpansion
cd %~dp0

set PnP=rundll32 syssetup,SetupInfObjectInstallAction DefaultInstall 128 .\*.inf
for /f "delims=" %%a in ('dir/b %PnP%') do (
echo == Installing PnP Drivers == "%%a"
::or
set PnP=pnputil -i -a "*.inf"
for /f "delims=" %%a in ('dir/b %PnP%') do (
echo == Installing PnP Drivers == "%%a"

ping -n 3 localhost 1>nul
start "" /wait %PnP%\%%a
)
cls
echo. * DONE *
pause
exit

答案1

经过调整和测试后,它现在可以正常工作了 - 我正在发布我的代码,希望它能够帮助将来需要快速方便地重新安装所有驱动程序的其他人。

经过测试并在 Windows 7 和 Windows 8 上运行,仅用 1 分钟多一点的时间就安装了 25 多个驱动程序。

@echo off&color a && Title [ MULTI .INF INSTALLER ]

::= Multi-PnP.Installer.cmd =
:: Put all Pnf, Infs, Cat, Sys files etc.
   together in same directory.

:: Run Batch From Current Directory 
cd %~dp0

:: Scan and Echo .inf files during install
for /f "delims=" %%a in ('dir/b *.inf') do (
echo == Installing PnP Drivers == "%%a"

:: Delay
ping -n 4 localhost 1>nul

:: Windows Plug Play Installer
start "" pnputil -i -a %%a
)
cls
echo. * DONE *
Echo.&Echo.&Echo.
echo == Reboot To Finalize Driver Installs! ==&pause>nul
exit

答案2

您编写的脚本要求 .bat 文件在包含所有驱动程序 .inf 文件的文件夹中运行,如果存在任何名称相似的 .dll 或 .sys 文件,则可能会出现一些问题。我对其进行了轻微修改,以便搜索更深入,这样您就可以从与 .bat 位于同一文件夹内的目录中对多个驱动程序进行分类,从而获得更简洁、更有条理的方法!

@echo off&color a && Title [ MULTI .INF INSTALLER ]

::= Multi-PnP.Installer.cmd =
:: Put all Pnf, Infs, Cat, and Sys files etc. in directories inside this one!

:: Run Batch from current directory
cd %~dp0

:: Scan and Echo .inf files duing install
for /f "tokens=* delims=" %%a in ('dir /b /s /o:gen *.inf') do (
echo == Installing PnP Drivers == "%%a"

:: Delay
ping -n 4 localhost 1>nul

:: Windows Plug-n-Play Installer
start "" pnputil -i -a %%a
)
echo * DONE *
Echo.&Echo.&Echo.
echo == Reboot to finalize driver installs! ==&pause>nul
exit

在提取了我们在办公室使用的型号的戴尔驱动程序 .cab 文件后,我使用了该脚本来制作一个通用映像,该映像可以安装 Windows,并且系统中预装了两种型号的驱动程序,只需将 .cab 文件提取到某处并从提取的位置运行此代码,它将提取找到的所有驱动程序,唯一需要人工交互的时候就是警告您有关第三方驱动程序的信息。

顺便说一句,谢谢!如果我没有找到这篇文章,我就不会知道这一点!它让我的生活变得轻松多了!

答案3

如果您将驱动程序放在要更新的机器上,上述脚本会很好地工作,但似乎无法通过网络与存储在服务器共享上的文件一起工作,因此我创建了下面的脚本(基于本页上的其他脚本)。我的脚本有一些附加功能,例如计算文件夹和子文件夹中有多少个 ini 文件,并提供安装数量,此外它只显示驱动程序 ini 文件名而不是完整路径(可能很长且不需要)。我希望有人觉得它有用...

@echo off && Title [ MULTI .INF INSTALLER ]
:: 将所有 Pnf、Infs、Cat 和 Sys 文件等放入此目录中
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
setlocal ENABLEDELAYEDEXPANSION

:: 从当前目录运行批处理
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cd %~dp0

:: 设置变量
:: ~~~~~~~~~~~~~~~~~~~
set mypath=%~dp0
set Full_list_of_files=%USERPROFILE%\Full_list_of_files.txt
set list_of_INI_files=%USERPROFILE%\list_of_INI_files.txt
set line_count=%USERPROFILE%\line_count.txt
set counter=0
set inf_total=0
set short_name=0
:: 如果生成的文件已存在,则删除它
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果存在 %Full_list_of_files% del /f /q %Full_list_of_files%
如果存在 %list_of_INI_files% del /f /q %list_of_INI_files%
如果存在 %line_count% del /f /q %line_count%

:: 在安装期间扫描并回显 .inf 文件
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cls
echo ----------------------------------------------------------------------------
echo %date% %time% 生成 INF 文件列表。请稍候...
dir %mypath% /b /s /-p /o:gen >%Full_list_of_files%
type %Full_list_of_files% | C:\Windows\system32\findstr /i /l ".inf" >%list_of_INI_files%
type %list_of_INI_files% | find /V /C "" >> %line_count%
Set /p inf_total=<%line_count%
del /f /q %line_count%
del /f /q %Full_list_of_files%
echo %date% %time% 开始驱动程序安装
echo ----------------------------------------------------------------------------
for /f "tokens=* delims=" %%a in (%list_of_INI_files%) do (set var=%%a) && (set short_name=%%~nxa) && 调用:process
goto :ending
:process
set /a counter=%counter%+1
echo 安装驱动程序 %counter% of %inf_total% : "%short_name%"
start pnputil -i -a %var%
ping -n 3 localhost 1>nul
goto :eof
:ending
Echo.&Echo.&Echo.
echo ----------------------------------------------------------------------------
echo.
echo %date% %time% 驱动程序安装完成。
echo ----------------------------------------------------------------------------
del /f /q %list_of_INI_files%
echo 请重新启动以完成驱动程序安装 &pause>nul
endlocal
exit

答案4

Windows 10。我今天找到了它。

d:\backup 路线

md d:\backup
pnputil /export-driver * d:\backup

备份所有驱动器

for /r %i in (where /r d:\backup *.inf) do (pnputil /add-driver %i /install)

恢复所有驱动器。

相关内容