Como automatizar .inf PnP Windows 7 Drivers com curinga?

3

Estou tentando automatizar as instalações do driver PnP para o Windows 7 com um dos arquivos em lote abaixo via loop For e curinga para o arquivo .inf.

O lote rundll32 lê e ecoa o arquivo .inf correto mas então me dá a "Instalação de erro falhou" e com o pnputil lote que roda sem qualquer erro colocado não instala.

Como posso corrigir os arquivos em lote para instalar o inf corretamente?

@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
    
por Dos_Probie 09.10.2012 / 03:44

3 respostas

2

Depois de ajustes e testes, comecei a funcionar agora - estou postando meu código que, com sorte, pode ajudar alguém no futuro que precisa de uma maneira rápida e conveniente de reinstalar todos os seus drivers.

Testado e trabalhando no Windows 7 e no Windows 8 com mais de 25 instalações de drivers em pouco mais de 1 minuto.

@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
    
por 09.10.2012 / 18:19
0

O script que você fez requer que o arquivo .bat seja executado dentro da pasta com todos os arquivos .inf do driver, o que pode ser um pouco problemático se houver arquivos .dll ou .sys com nomes semelhantes. Eu o modifiquei ligeiramente para que ele pesquise mais profundamente, assim você pode catalogar vários drivers de diretórios dentro da mesma pasta que o .bat para uma abordagem muito mais limpa e organizada!

@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

Eu usei esse script depois de extrair os arquivos .cab do driver da Dell para os modelos que usamos no escritório para criar uma imagem universal que possa instalar o Windows com os drivers dos dois modelos pré-carregados no sistema, apenas extrair os arquivos .cab e executar este código de onde você extraiu e puxará todos os drivers que encontrar, a única vez que requer interação humana é avisá-lo sobre drivers de terceiros.

Obrigado pelo caminho! Eu não teria descoberto isso a menos que eu encontrasse este post! Tornei a minha vida muito mais fácil!

    
por 05.02.2015 / 14:11
0

Os scripts acima funcionam bem se você colocar os drivers na máquina que você pretende atualizar, mas não parece funcionar em uma rede com os arquivos armazenados em um compartilhamento de servidor, então criei o seguinte (baseado nos outros scripts em esta página) que faz. My Script tem alguns acréscimos a ele, como calcular quantos arquivos ini estão na pasta e na (s) subpasta (s) e fornecer uma contagem das instalações, exibindo apenas o nome do arquivo ini do driver, em vez do caminho completo (que pode ser longo e é desnecessário). Espero que alguém ache útil ...

@echo off && Title [ MULTI .INF INSTALLER ]
:: Put all Pnf, Infs, Cat, and Sys files etc. in directories inside this one
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
setlocal ENABLEDELAYEDEXPANSION

:: Run Batch from current directory
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cd %~dp0

:: Setting variables
:: ~~~~~~~~~~~~~~~~~
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
:: Deleting generated files if already exist
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if exist %Full_list_of_files% del /f /q %Full_list_of_files%
if exist %list_of_INI_files% del /f /q %list_of_INI_files%
if exist %line_count% del /f /q %line_count%

:: Scan and Echo .inf files during install
:: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cls
echo ----------------------------------------------------------------------------
echo %date% %time% Generating list of INF files. Please Wait ...
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% Starting Driver Installation
echo ----------------------------------------------------------------------------
for /f "tokens=* delims=" %%a in (%list_of_INI_files%) do (set var=%%a) && (set short_name=%%~nxa) && Call :process
goto :ending
:process
set /a counter=%counter%+1
echo Installing Driver %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% Driver Installation Completed.
echo ----------------------------------------------------------------------------
del /f /q %list_of_INI_files%
echo Please reboot to finalize driver installs &pause>nul
endlocal
exit

    
por 08.07.2015 / 18:21